【问题标题】:MySQL timestamp - correct daysMySQL 时间戳 - 正确的日期
【发布时间】:2013-08-19 11:11:44
【问题描述】:

我将事件存储在 MySQL 数据库中,开始日期和时间以 UNIX 格式存储在“startTimeStamp”列中。

当我尝试使用简单查询获取特定日期的事件时

SELECT * FROM events WHERE FROM_UNIXTIME(startTimeStamp, '%Y-%m-%d') = '2013-08-20'

当时间戳下的日期和时间大于凌晨 2 点(即 2013 年 8 月 20 日 03:00:00)时,一切正常,但当它更早时,它不会在同一天显示。

简单示例:我有两个事件 - 日期相同但时间不同

  1. 2013-08-20 03:00:00 (1376960400)
  2. 2013-08-20 00:00:00 (1376949600)

当我运行前面提到的查询时,我会得到第一个,但不是第二个。要获得第二个,我必须查询前一天 (2013-08-19) 的事件

你知道为什么吗?也许我错过了什么?

非常感谢!

【问题讨论】:

  • 也许你应该为此设置默认时区。

标签: php mysql timestamp


【解决方案1】:

查看您的时区:

SELECT @@global.time_zone, @@session.time_zone;

然后正确设置:

SET time_zone = timezonename;

编辑: 这可能会有所帮助:MySQL datetime fields and daylight savings time -- how do I reference the "extra" hour?

【讨论】:

  • @@global.time_zone - SYSTEM @@session.time_zone - SYSTEM 我认为这样可以吗?不是吗?
  • @Real299 是的,它需要你的计算机时区。
【解决方案2】:

我想你可能选择了daylight saving time 适用的地方。在这种情况下,时间转移主要是在凌晨 2 点到凌晨 3 点之间完成,这可能会导致不同的日子。

【讨论】:

    【解决方案3】:

    这基本上是因为 Unix 时间戳的含义。这只是从 1-1-1970 的秒数,所以从技术上讲,1376949600 的值可能仍然是前一天,具体取决于您的时区。

    就我而言:

    echo date("d-m-Y h:i", 1376949600);
    // output: 19-08-2013 11:00
    

    【讨论】:

      【解决方案4】:

      这样使用:

      $d="1376960400";
      echo date("Y-m-d",$d);
      

      你可以从this link使用你想要的格式

      【讨论】:

        猜你喜欢
        • 2017-11-19
        • 1970-01-01
        • 2012-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-16
        • 1970-01-01
        相关资源
        最近更新 更多