在PHP和MySQL中设置时区

我正在制作一个需要使用PHPdate()函数将日期存储在MySQL中的应用程序。

<?php $finalize_at = date('Y-m-d H:i:s'); ?>

这些日期需要在MySQL中使用NOW()函数返回以小时为单位的时差进行比较,例如:

SELECT TIMESTAMPDIFF( hour, NOW(), finalize_at ) FROM plans;

但是问题是– PHP date函数date('Y-m-d H:i:s')使用PHP时区设置,而该NOW()函数从MySQL服务器获取MySQL

timezome。

我正在尝试解决此问题:

  1. date_default_timezone_set('Europe/Paris'); 它仅适用于PHP。
  2. date.timezone= "Europe/Paris"; 它仅适用于PHP。
  3. SELECT CONVERT_TZ(now(), 'GMT', 'MET'); 此返回为空。
  4. mysql> SET time_zone = 'Europe/Paris'; 这从MySQL的控制台抛出错误。

而且对于MySQL,时区不会更改。

有什么方法可以更改PHP和MySQL的时区,而不必从MySQL控制台进行更改,或者从某个地方设置时区更改php.ini,并使这些值可用于PHP和MySQL。

非常感谢您的支持。

回答:

在PHP中:

<?php

define('TIMEZONE', 'Europe/Paris');

date_default_timezone_set(TIMEZONE);

对于MySQL:

<?php

$now = new DateTime();

$mins = $now->getOffset() / 60;

$sgn = ($mins < 0 ? -1 : 1);

$mins = abs($mins);

$hrs = floor($mins / 60);

$mins -= $hrs * 60;

$offset = sprintf('%+d:%02d', $hrs*$sgn, $mins);

//Your DB Connection - sample

$db = new PDO('mysql:host=localhost;dbname=test', 'dbuser', 'dbpassword');

$db->exec("SET time_zone='$offset';");

现在,PHP和MySQL时区已在您的应用程序中同步。无需使用php.iniMySQL控制台!

这是来自SitePoint上的这篇文章。

以上是 在PHP和MySQL中设置时区 的全部内容, 来源链接: utcz.com/qa/412015.html

回到顶部