PHP Daylight节省错误?

时间:2014-03-19 22:01:16

标签: php date datetime dst

我遇到了一个奇怪的错误,这个错误发生在太平洋时间运行的PHP中(可能还有其他)。我有代码在一周中的第一天(星期日)获得该周的任意日期(在UNIX时间戳中):

$day = date('w', $date);
$start_of_week = date('Y-m-d', $date - ($day * 60*60*24));
echo $start_of_week;

打印2014-03-08

这适用于我尝试的每一个日期,除了2014年3月9日那一周,这恰好是美国夏令时的一周。对于那些人来说,$start_of_week是'2014-03-08',这是一个星期六。

当我将时区设置为GMT运行此代码时,我得到正确的输出('2014-03-09')。

此外,当我在PST中将代码更改为以下内容时,我得到了正确的输出:

$day = date('w', $date);
$start_of_week = date('Y-m-d', strtotime("-$day day", $date));
echo $start_of_week;

打印2014-03-09

所以...跆拳道?为什么strtotime("-1 day", $date)$date - 60*60*24之间存在差异?似乎它在不同的时区之间跳跃。

codepad example

1 个答案:

答案 0 :(得分:0)

当您使用-1天时,它使用$ date中的时间,只更改日期。当您使用-60 * 60 * 24时,它会将时钟回滚24小时。在DST更改的那一天,一天只有23个小时,所以它过了一个小时。

– Barmar 2014年3月19日在22:11