Php MySQL时间戳-正确的天数

Php MySQL时间戳-正确的天数,php,mysql,timestamp,Php,Mysql,Timestamp,我将事件存储在MySQL数据库中,开始日期和时间以UNIX格式存储在“startTimeStamp”列中 当我尝试使用简单查询获取特定日期的事件时 选择*FROMevents其中FROM\u UNIXTIME(startTimeStamp,“%Y-%m-%d”)=“2013-08-20” 如果时间戳下的日期和时间大于凌晨2点(即2013-08-20 03:00:00),则一切正常,但如果时间戳下的日期和时间早于凌晨2点,则不会在同一天显示 快速示例:我有两个事件-相同的日期但不同的时间 2013

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

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

选择*FROM
events
其中FROM\u UNIXTIME(
startTimeStamp
,“%Y-%m-%d”)=“2013-08-20”

如果时间戳下的日期和时间大于凌晨2点(即2013-08-20 03:00:00),则一切正常,但如果时间戳下的日期和时间早于凌晨2点,则不会在同一天显示

快速示例:我有两个事件-相同的日期但不同的时间

  • 2013-08-20 03:00:00(1376960400)
  • 2013-08-20 00:00:00(1376949600)
  • 当我运行前面提到的查询时,我将得到第一个,但不是第二个。要获得第二个,我必须查询前一天的事件(2013-08-19)

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


    非常感谢

    看看你的时区是什么:

    SELECT @@global.time_zone, @@session.time_zone;
    
    然后正确设置:

    SET time_zone = timezonename;
    
    编辑:
    这可能会有所帮助:

    我想您可能已经选择了一个适用于的地方。在这种情况下,时间转移主要在凌晨2点到3点之间进行,这可能会导致不同的日期。

    这基本上是因为Unix时间戳的含义不同。这只是1970年1月1日的秒数,因此从技术上讲,1376949600值可能仍然是前一天的值,这取决于您所在的时区

    就我而言:

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

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

    您可以从

    中使用您想要的格式。您应该为此设置默认时区。@@global.time\u zone-SYSTEM@@session.time\u zone-SYSTEM我想这样可以吗?是吗?@Real299是的,它会占用你的电脑时区。