[英]PHP Daylight savings bug?
我剛剛遇到了一個奇怪的錯誤,它發生在在太平洋時間(可能還有其他人)運行的 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
所以……WTF? 為什么strtotime("-1 day", $date)
和$date - 60*60*24
之間存在差異? 似乎它在不同的時區之間跳躍。
當您使用 -1 天時,它使用 $date 中的時間,並且只是更改日期。 當您使用 - 60 * 60 * 24 時,它會將時鍾倒退 24 小時。 夏令時變化的那天,一天只有23小時,所以差了一個小時。
– 巴馬爾 2014 年 3 月 19 日,22:11
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.