关于EDT和时差的一些问题

时间:2017-11-08 05:14:20

标签: php mysql datetime

  1. 我的网站简介
  2. 我的网站适用于韩国(AKA大韩民国)的访客。 而我的网站的服务器位于美国。 PHPMyAdmin在运行查询EDT时会显示SELECT @@ system_time_zone

    1. 我的网站结构
    2. 今年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();
      
      1. 问题情况
      2. 今年11月的一天,当我写了一篇文章并检查了帖子的日期字段(my_datetime)时,我与韩国的时间相差一小时。 显然,在十月底,我更正了3600 * 13的时差。然后我确认它与韩国时间相符。但是,在11月,有一个小时的时差!

        1. 猜猜原因
        2. 似乎美国夏令时正在应用于我网站的数据库服务器。我猜对了吗?

          1. 我的问题
          2. 1)如何从根本上解决这个时间差? 将DB时间转换为KST是否正确? 或者这是转换为UTC然后将3600 * x添加到UTC的正确方法吗?

            2)即使问题得到解决,我的数据库中的一些现有数据与韩国时间的时差为1小时。 如果我想选择具有时差的数据,我会使用什么查询? 还有多少或从数据中减去它以摆脱1小时的时差?

1 个答案:

答案 0 :(得分:0)

  1. 使用UTC在数据库中存储时间。
  2. 将您的查询更改为以UTC日期时间插入。
  3. 使用外部库将UTC转换为相应的时区。 (以下是我的个人推荐。) 可能有最好的。

    PHP:Carbon

    Javascript:片刻,片刻时区。

  4. 不需要数据库服务器的时区。

  5. 很少手动验证,或创建一个工作来更改UTC中的所有日期。
  6. 编辑:

    http://carbon.nesbot.com/docs/

    我的意思是你可以创建一个脚本并使用cron job运行。