首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 夏令時間 Bug:date() 加 86400 秒跨越 DST 導致時間偏移

     編輯:PHP 相關知識

問題重現

ini_set('date.timezone', 'Europe/Berlin');
$t = 1382824800; // 2013-10-27 00:00:00
echo date('Y-m-d H:i:s', $t);           // 2013-10-27 00:00:00
echo date('Y-m-d H:i:s', $t + 86400);   // 2013-10-27 23:00:00 (少 1 小時!)

歐洲夏令時間於 10 月最後週日結束,時鐘撥回 1 小時,導致單純加 86400 秒(24小時)落在同一天 23:00。

根本原因

date() 依據時區規則轉換時間戳。夏令時間切換日實際長度不等於 86400 秒。

正確做法

  • 使用 DateTime 物件:(new DateTime('@'.$t))->modify('+1 day')->format('Y-m-d H:i:s')
  • 或 strtotime('+1 day', $t) 讓系統處理日曆邏輯。

影響範圍

所有使用「時間戳 + 固定秒數」計算日期的舊代碼,若專案部署於實行夏令時地區(非台灣/中國),皆潛藏此 Bug。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved