我使用PHP和MySQL。我有下面的插入查询工作正常。
$query="INSERT INTO mytable (user_id, user_datetime) VALUES ".
"(".$_SESSION["user_id"].", NOW());";
字符串
问题是:
1)当我在本地主机上测试时,NOW()从我的系统中选择日期和时间。这很好,没有问题!
2)现在我已经托管我的网站到一个虚拟主机服务器,这是在加拿大的任何地方,我在印度。现在,如果任何插入发生,它存储的时间加拿大不是印度。这是问题。我如何才能摆脱这一点。我如何在我的数据库中保存印度时间?
2条答案
按热度按时间nhhxz33t1#
你有两种解决方案:使用PHP方法或MySQL方法(你的问题标题是误导性的,它不是
PHP NOW()
而是MySQL NOW()
)。在PHP中,你可以使用
date_default_timezone_set
函数来完成这个任务,它将为你的PHP脚本设置默认的时区。只要记住把它放在顶部附近,这样它就适用于你正在做的事情。
但是这将为所有PHP函数设置时区,而不是MySQL数据库
NOW()
命令。要修改MySQL的时区,必须使用
SET time_zone = timezonename;
。参见this SO thread for setting MySQL timezone或official documentation。范例:
字符串
xxb16uws2#
这是一个非常古老的线程,但我仍然想在这里添加我的五美分,这真的是缺失的。通常情况下,你不想在数据库中存储任何本地日期时间,你想存储UTC日期时间,然后使用PHP的
DateTimeZone
类将其转换为任何时区,特别是如果这是一个公共项目。要实现这一点,你必须使用UTC_TIMESTAMP()
而不是NOW()
或其等效的LOCALTIME()
,完全没有必要修改MySQL的timezone参数,即使除了你自己没有其他用户,以UTC格式存储时间戳也是一个标准和更好的做法。