如何在不同的时区处理MYSQL NOW()?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在不同的时区处理MYSQL NOW()?相关的知识,希望对你有一定的参考价值。
$query="INSERT INTO mytable (user_id, user_datetime) VALUES ".
"(".$_SESSION["user_id"].", NOW());";
问题是:
1)当我在我的localhost上测试时,NOW()正在从我的系统中选择日期和时间。那很好,没问题!
2)现在我已将我的网站托管到加拿大任何地方的网络托管服务器,我在印度。现在,如果发生任何插入,它将存储加拿大而不是印度的时间。这就是问题。我怎么能摆脱这个。如何在我的数据库中保存印度时间?
答案
您有两个解决方案:使用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。
例:
<?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());";
以上是关于如何在不同的时区处理MYSQL NOW()?的主要内容,如果未能解决你的问题,请参考以下文章
选择 Now() 作为 CurrentDateTime mysql 时区