簡體   English   中英

PHP夏令時錯誤?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM