我正在嘗試制作倒數計時器。我正在使用 PHP 和 Javascript。我面臨的問題是時差顯示比 php 晚了一段時間。如果 PHP 顯示 19 小時,則 Javascript 顯示 16 小時。我的函數顯示與 PHP 的時差$timestamp = strtotime($time['expiration']) - time();function convert_timestamp_to_date($timestamp){ $date1 = new DateTime("@0"); $date2 = new DateTime("@$timestamp"); if ($date1->diff($date2)->d < 1) { return $date1->diff($date2)->format('%h Hours'); } else { return $date1->diff($date2)->format('%a Days'); }}我的函數用 Javascript 顯示時差// $job['job_expiration'] = 2020-05-13 15:24:22function countdownTimer() { const difference = +new Date("<?php echo $job['job_expiration']; ?>") - +new Date(); let remaining = "Time's up!"; if (difference > 0) { const parts = { days: Math.floor(difference / (1000 * 60 * 60 * 24)), hours: Math.floor((difference / (1000 * 60 * 60)) % 24), minutes: Math.floor((difference / 1000 / 60) % 60), seconds: Math.floor((difference / 1000) % 60) }; remaining = Object.keys(parts) .map(part => { if (!parts[part]) return; return `${parts[part]} ${part}`; }) .join(" "); } document.getElementById("countdown").innerHTML = remaining;}countdownTimer();setInterval(countdownTimer, 1000);
1 回答

當年話下
TA貢獻1890條經驗 獲得超9個贊
它看起來像一個時區差異問題。
如果您在 中輸入類似“2020-05-13 15:24:22”的字符串Date()
,它會假定該字符串在計算機的時區內。
例如,我的電腦處于太平洋夏令時 (GMT - 7) 時區:
let date1 = new Date("2020-05-13 10:56:50"); console.log(date1); // '2020-05-13T17:56:50.000Z'
請注意,Date
7 小時后將我的太平洋夏令時轉換為 UTC。
如果您只是簡單地調用Date()
而不帶任何參數,您將獲得 UTC 時區的當前日期和時間:
let date2 = new Date(); console.log(date2); // '2020-05-12T17:57:36.088Z'
從示例中很難確定,但很可能是 PHP 時間:
<?php echo $job['job_expiration']; ?>
在服務器的時區中,但 JavaScript 在具有不同時區的客戶端計算機上運行。
關于處理時區的建議
避免弄亂時區的一個好規則是始終以 UTC 格式存儲和操作日期,然后將它們轉換為本地時間僅用于顯示。
如果您使用字符串作為 的參數new Date
,請確保該字符串采用 UTC 時間:
let date = new Date('2020-05-12T17:56:50.000Z');
尾隨的“Z”表示此日期字符串處于 UTC(“zulu”)時區。
- 1 回答
- 0 關注
- 119 瀏覽
添加回答
舉報
0/150
提交
取消