我遇到了一个奇怪的错误,这个错误发生在太平洋时间运行的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
之间存在差异?似乎它在不同的时区之间跳跃。
答案 0 :(得分:0)
当您使用-1天时,它使用$ date中的时间,只更改日期。当您使用-60 * 60 * 24时,它会将时钟回滚24小时。在DST更改的那一天,一天只有23个小时,所以它过了一个小时。
– Barmar 2014年3月19日在22:11