我的网站适用于韩国(AKA大韩民国)的访客。
而我的网站的服务器位于美国。
PHPMyAdmin在运行查询EDT
时会显示SELECT @@ system_time_zone
。
今年10月我第一次将网站上传到此服务器时,我检查了数据库时间。
似乎与韩国有13个小时的时差。所以我将3600 * 13
秒添加到DB时间(不设置时区),如下所示。
const Offset = 3600 * 13;
$SelectNow = $PDO->prepare('SELECT DATE_ADD(NOW(), INTERVAL '.Offset.' SECOND)');
$SelectNow->execute() or exit;
$DbNow = $SelectNow->fetchColumn();
我的网站如上所述$DbNow
并在各种情况下使用它。
例如,在发布情况中,在$DbNow
查询的日期时间字段中输入INSERT INTO
,如下所示:
$WriteNote = $PDO->prepare('INSERT INTO table_note(my_datetime, my_contents) VALUES("'.$DbNow.'", :my_contents)');
$WriteNote->bindValue(':my_contents', $my_contents, PDO::PARAM_STR);
$WriteNote->execute();
今年11月的一天,当我写了一篇文章并检查了帖子的日期字段(my_datetime
)时,我与韩国的时间相差一小时。
显然,在十月底,我更正了3600 * 13
的时差。然后我确认它与韩国时间相符。但是,在11月,有一个小时的时差!
似乎美国夏令时正在应用于我网站的数据库服务器。我猜对了吗?
1)如何从根本上解决这个时间差?
将DB时间转换为KST
是否正确?
或者这是转换为UTC
然后将3600 * x
添加到UTC
的正确方法吗?
2)即使问题得到解决,我的数据库中的一些现有数据与韩国时间的时差为1小时。 如果我想选择具有时差的数据,我会使用什么查询? 还有多少或从数据中减去它以摆脱1小时的时差?
答案 0 :(得分:0)
使用外部库将UTC转换为相应的时区。 (以下是我的个人推荐。) 可能有最好的。
PHP:Carbon
Javascript:片刻,片刻时区。
不需要数据库服务器的时区。
http://carbon.nesbot.com/docs/
我的意思是你可以创建一个脚本并使用cron job运行。