【问题标题】:Modify TIMESTAMP to reflect correct TIMEZONE修改 TIMESTAMP 以反映正确的 TIMEZONE
【发布时间】:2014-10-14 02:01:02
【问题描述】:

所以我正在尝试将时间戳提交到我的 MySQL 表中。它使用这行代码成功地完成了它,但是时区不正确。有人知道需要做什么来确保更新时间戳以反映美国/纽约吗?

<input type="hidden" name="hiddenField" id="hiddenField" value=<?php $query = "UPDATE ApparatusTrouble SET _submitted_ = CURRENT_TIMESTAMP ";  

【问题讨论】:

标签: php mysql timezone timestamp


【解决方案1】:

不要试图控制时区,因为它存储在数据库中。时间戳将是 UTC 中的当前时间,也就是说,它是一个全球通用且独立于时区的时间戳。

如果您想将时间显示为纽约时间,这是您的显示逻辑的问题:从数据库中检索 UTC 时间戳,然后将其转换为纽约时间并显示。

【讨论】:

    【解决方案2】:

    TIMESTAMP 存储不带时区,当您从 Mysql 检索数据时由 mysql 服务器应用时区,因此您需要像这样为您的 mysql 连接正确设置时区,

    SET time_zone = 'Europe/Helsinki';
    SET time_zone = "+00:00";
    SET @@session.time_zone = "+00:00";
    

    更好的做法是设置 +00:00 进行连接,例如在开始 php 脚本中在客户端应用时区后

    【讨论】:

      【解决方案3】:

      如果可以的话,我建议使用 PHP 来生成时间戳,我会坚持使用 UTC(它可以避免时区混淆)。

      此外,您这样做的方式客户端可以修改表单数据并提交 SQL,这不是设计代码的最安全方式(以防您不知道)。

      此外,如果您在 PHP 处理时生成时间戳并将其加载到隐藏的表单变量中,它将具有 PHP 处理表单的日期,而不是提交表单的时间。

      IE。

      PHP 中提交的表单动作中的某处...

      <?php
      ...
      
      date_default_timezone_set('UTC'); //Available since PHP 5.1
      
      //see php date manual (http://php.net/manual/en/function.date.php)
      // not sure what format CURRENT_TIMESTAMP is set to in your SQL server
        $now = date("Y-m-d H:i:s", time());
        $query = 'UPDATE ApparatusTrouble SET _submitted_ = ' . $now . ';';
      
      ...
      ?>
      

      【讨论】:

        猜你喜欢
        • 2021-12-26
        • 1970-01-01
        • 2018-08-06
        • 2016-04-21
        • 2012-06-21
        • 2019-01-28
        • 2012-03-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多