PHP 與 JavaScript 時間戳本質相同(均為 Unix Epoch 起算),但**單位與時區處理不同**,直接比較會導致錯誤。
| 語言 | 函式 | 單位 | 範例值 |
|---|---|---|---|
| PHP | time() | 秒 | 1703000000 |
| JavaScript | Date.now() / getTime() | 毫秒 | 1703000000000 |
換算:1 秒 = 1000 毫秒。比較前必須統一單位(PHP ×1000 或 JS ÷1000)。
time() 受 date_default_timezone_set() 影響。設定為東八區(中國)後,起算點變為 1970-01-01 08:00:00這導致相同瞬間取得的時間戳數值不同(相差 8 × 3600 秒)。
當比較結果不符預期時,**不要猜**,直接輸出完整日期元素逐一比對:
// PHP
echo date('Y-m-d H:i:s', $timestamp);
// JavaScript
console.log(new Date(timestamp).toISOString());
// 或拆解
const d = new Date(timestamp);
console.log(d.getFullYear(), d.getMonth()+1, d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds());
逐一比對年、月、日、時、分、秒,立刻定位問題根源。
2023-12-20T10:30:00+08:00),避免時間戳陷阱DATETIME 或 TIMESTAMP 型別,而非整數時間戳date_default_timezone_set('Asia/Shanghai')toLocaleString() 或 Intl.DateTimeFormat 格式化顯示