在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。
我正在尝试解决此问题:
date_default_timezone_set('Europe/Paris');
它仅适用于PHP。date.timezone= "Europe/Paris";
它仅适用于PHP。SELECT CONVERT_TZ(now(), 'GMT', 'MET');
此返回为空。mysql> SET time_zone = 'Europe/Paris';
这从MySQL的控制台抛出错误。
而且对于MySQL,时区不会更改。
有什么方法可以更改PHP和MySQL的时区,而不必从MySQL控制台进行更改,或者从某个地方设置时区更改php.ini
,并使这些值可用于PHP和MySQL。
非常感谢您的支持。
回答:
在PHP中:
<?phpdefine('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.ini
MySQL控制台!
这是来自SitePoint上的这篇文章。
以上是 在PHP和MySQL中设置时区 的全部内容, 来源链接: utcz.com/qa/412015.html