PHP 的 time() 與 JavaScript 的 Date.getTime() 雖同源於 Unix Epoch(1970-01-01 00:00:00 UTC),但在單位與時區處理上存在關鍵差異,若不加注意極易導致比對錯誤。
| 語言 | 函式 | 單位 | 範例值 |
|---|---|---|---|
| PHP | time() | 秒 | 1704067200 |
| JavaScript | Date.now() / getTime() | 毫秒 | 1704067200000 |
轉換公式: JS 毫秒值 = PHP 秒值 × 1000
time() 回傳的是 UTC 時間戳(不受 date_default_timezone_set() 影響)。但開發者常誤以為設定時區後 time() 會改變,實際上只有 date()、strtotime() 等格式化函式受時區影響。Date.getTime() 同樣回傳 UTC 毫秒數。但 new Date() 在無參數建構時,會依瀏覽器本地時區顯示,導致直觀上感覺「不一致」。// PHP 端
$phpTime = time(); // 1704067200
// JS 端
var jsTime = Date.now(); // 1704067200000
// 直接比較 → 永遠不相等
if ($phpTime == $jsTime) { ... } // 錯誤
// 統一轉為秒比較
if ($phpTime == floor($jsTime / 1000)) { ... }
// 或統一轉為毫秒比較
if (($phpTime * 1000) == $jsTime) { ... }
當時間比對出現預期外結果時,不要只比對時間戳數值。請分別輸出「年、月、日、時、分、秒」各欄位逐一比對:
// PHP
echo date('Y-m-d H:i:s', $phpTime);
// JavaScript
console.log(new Date(jsTime).toISOString()); // UTC 標準格式
console.log(new Date(jsTime).toString()); // 本地時區格式
透過具體日期時間元件對比,能快速定位是單位換算錯、時區誤解、或是夏令時間導致的偏移。
time()/getTime() 皆為 UTC;格式化輸出才受時區影響。2024-01-01T00:00:00Z),避免單位與時區歧義。