我正在制作一个需要使用PHP date()函数将日期存储在MySQL中的应用程序。
date()
<?php $finalize_at = date('Y-m-d H:i:s'); ?>
这些日期需要在MySQL中使用NOW()函数返回以小时为单位的时差进行比较,例如:
NOW()
SELECT TIMESTAMPDIFF( hour, NOW(), finalize_at ) FROM plans;
但是问题是– PHP date函数date('Y-m-d H:i:s')使用PHP时区设置,而该NOW()函数从MySQL服务器获取MySQL timezome。
date('Y-m-d H:i:s')
我正在尝试解决此问题:
date_default_timezone_set('Europe/Paris');
date.timezone= "Europe/Paris";
SELECT CONVERT_TZ(now(), 'GMT', 'MET');
mysql> SET time_zone = 'Europe/Paris';
而且对于MySQL,时区不会更改。
有什么方法可以更改PHP和MySQL的时区,而不必从MySQL控制台进行更改,或者从某个地方设置时区更改php.ini,并使这些值可用于PHP和MySQL。
php.ini
非常感谢您的支持。
在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上的这篇文章。