php 如何在不同的时区处理MYSQL NOW()?

4zcjmb1e  于 2023-11-16  发布在  PHP
关注(0)|答案(2)|浏览(135)

我使用PHP和MySQL。我有下面的插入查询工作正常。

$query="INSERT INTO mytable (user_id, user_datetime) VALUES ".
       "(".$_SESSION["user_id"].", NOW());";

字符串
问题是:
1)当我在本地主机上测试时,NOW()从我的系统中选择日期和时间。这很好,没有问题!
2)现在我已经托管我的网站到一个虚拟主机服务器,这是在加拿大的任何地方,我在印度。现在,如果任何插入发生,它存储的时间加拿大不是印度。这是问题。我如何才能摆脱这一点。我如何在我的数据库中保存印度时间?

nhhxz33t

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 timezoneofficial documentation
范例:

<?php
date_default_timezone_set('Asia/Calcutta');
$query = "INSERT INTO mytable (user_id, user_datetime) VALUES ".
   "(".$_SESSION["user_id"].", ".date('Y-m-d H:i:s').");";

// OR

$query = "SET time_zone = 'Asia/Calcutta';"; // this will persist only for the current connection
$query .= "INSERT INTO mytable (user_id, user_datetime) VALUES ".
           "(".$_SESSION["user_id"].", NOW());";

字符串

xxb16uws

xxb16uws2#

这是一个非常古老的线程,但我仍然想在这里添加我的五美分,这真的是缺失的。通常情况下,你不想在数据库中存储任何本地日期时间,你想存储UTC日期时间,然后使用PHP的DateTimeZone类将其转换为任何时区,特别是如果这是一个公共项目。要实现这一点,你必须使用UTC_TIMESTAMP()而不是NOW()或其等效的LOCALTIME(),完全没有必要修改MySQL的timezone参数,即使除了你自己没有其他用户,以UTC格式存储时间戳也是一个标准和更好的做法。

相关问题