试图理解PHP中的时间戳和时区

时间:2010-12-24 08:59:55

标签: php timezone timestamp

我有一个需要支持时区的PHP应用程序。现在我将日期和时间值作为整数存储在数据库中。所以这就是我的工作。

// now create the DateTime object for this time and user time zone
$dtime = new DateTime($date_time, new DateTimeZone($time_zone));
$timestamp = $dtime->format('U');

我不明白的是,即使此人在新西兰(太平洋/奥克兰)并且应用程序存储此日期:24-12-2010 00:00:00使用上述代码,该值返回为: 1293102000

然后使用完全相同的日期/时间并将时区设置为伦敦(欧洲/伦敦)我得到此时间戳:1293148800

为什么时间戳不同?我认为时间戳与Unix Epoch的同一天数相同?

如果它们不同,则意味着当有人在数据库中搜索24-12-2010 00:00:00和24-12-2010 23:59:59之间的所有记录时,我需要使用用户时区来创建时间戳,我必须使用时区首先创建时间戳。

帮助!

1 个答案:

答案 0 :(得分:0)

因为新西兰的时区是+1300 UTC,伦敦是UTC,13 x 3600seconds = 1293148800-1293102000

由于您已经存储为整数,因此在构造$dtime

时,应始终使用零UTC 跳过时区

进行测试

# date_create is procedural style
$obj =  date_create('24-12-2010 00:00:00', new DateTimeZone('europe/london'));
echo $obj->format('U');

$obj =  date_create('24-12-2010 00:00:00');
echo $obj->format('U');