【问题标题】:Changing stored database date to current timezone (strtotime?)将存储的数据库日期更改为当前时区(strtotime?)
【发布时间】:2014-11-25 06:07:56
【问题描述】:

向数据库添加记录时,我使用 MySQL NOW() 函数对列进行日期标记。但是,我的服务器位于地球的另一端,与我的时区不同。

当从数据库中提取这个日期戳时,我需要将它的值调整 +8 小时,以便让它在我的网站上显示“正确”的时间。但是,我首先需要strtotime 来创建一个可用的日期,然后strtotime 将其设置为+8 小时,然后strtotime 将其更改为所需的格式,对吧?

我已经尝试过多次迭代语句,但我可以得到30 Sep 07:3501 Jan 00:00 结果,而不是请求的30 Sep 15:35

值以datetime格式存储在数据库中:2014-09-30 07:35:36

我尝试过的许多事情之一都没有成功:

$chat_time = date("Y-m-d H:i:s", strtotime($chat_time));
$chat_time = strtotime("+8 hours");
$chat_time = date("d M, H:i", strtotime($chat_time));

【问题讨论】:

    标签: php mysql date timezone


    【解决方案1】:

    您可以使用DateTime()DateTimeZone() 来调整日期时间值的时区:

    $chat_time = new DateTime($chat_time, new DateTimeZone('DB_TIMEZONE'));
    $chat_time->setTimezone(new DateTimeZone('YOUR_TIMEZONE'));
    echo $chat_time->format("d M, H:i");
    

    显然您需要将DB_TIMEZONEYOUR_TIMEZONE 替换为有效值。你可以得到他们的名单here

    【讨论】:

      【解决方案2】:

      你最好在你的连接上设置时区,NOW() 然后喜欢会返回正确的时区:

      SET time_zone = 'Europe/Amsterdam'
      

      这是一个 sql 查询。连接后需要执行。

      当然,这仅适用于新的插入和更新,您还需要修复现有的:

      UPDATE table SET datetimeColumn = DATE_ADD(datetimeColumn, INTERVAL 8 HOUR)
      

      【讨论】:

      • 防止以后出现此问题的好主意,谢谢。 +1
      • 我建议不要将连接设置为本地时区,而是在 UTC 中保存时间戳以消除歧义。为此使用UTC_TIMESTAMP() 而不是NOW()
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-09
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多