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

时间:2014-04-18 10:39:42

标签: php mysql timezone

我正在使用PHP和MySQL。我有以下插入查询,工作正常。

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

问题是:

1)当我在我的localhost上测试时,NOW()正在从我的系统中选择日期和时间。那很好,没问题!!!

2)现在我已将我的网站托管到加拿大任何地方的网络托管服务器,我在印度。现在,如果发生任何插入,它将存储加拿大而不是印度的时间。这就是问题。我怎么能摆脱这个。如何在我的数据库中保存印度时间?

1 个答案:

答案 0 :(得分:3)

您有两种解决方案:使用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());";