我有未來的日期和現在的日期。這兩個日期總是在同一天,但時間不同。我的目標是獲得未來日期和現在日期之間的秒差作為計時器的倒計時值。問題是當我計算得到不準確的結果時。
在我將毫秒轉換為秒的研究公式中,millis / 1000.0但沒有一個回傳準確的倒計時結果;
我的代碼
let now = (new Date().getTime() / 1000.0);
let futureDate = (new Date('2022-04-01T17:41:47.000Z').getTime() / 1000.0);
let difference;
difference = (futureDate - now); // not accurate
difference = parseInt(difference, 10); // not accurate
我希望該解決方案在所有時區都能正常作業并繼承本地系統時區而不是未來的日期時區。
任何幫助將不勝感激。
uj5u.com熱心網友回復:
您應該添加系統時區,如下所示:
let date = new Date('2022-04-01T17:41:47.000Z');
let now = new Date().getTime() / 1000.0;
let futureDate = (date.getTime() date.getTimezoneOffset() * 60000) / 1000.0;
let difference;
difference = (futureDate - now); // not accurate
difference = parseInt(difference, 10); // not accurate
console.log(difference);
uj5u.com熱心網友回復:
我想檢查一下您是否知道像“0000-00-00T00:00:00.000Z”這樣的日期格式總是被識別為世界時間(英國時間)。
嘗試使用 HH:MM 而不是最后一個 Z 字符。
例如,如果您在美國東部,則為“2022-04-01T17:41:47.000-05:00”。
uj5u.com熱心網友回復:
由于尾隨“Z”,時間戳“2022-04-01T17:41:47.000Z”將被決議為偏移量 0(又名 UTC 或 GMT),表示偏移量 0。以毫秒為單位的 now 和 then 之間的區別是:
let diff = new Date('2022-04-01T17:41:47.000Z') - Date.now();
其中diff的負值表示時間戳是過去的。要將差值轉換為秒,請將結果除以 1,000。
如果在完全相同的時間運行,則diff的值將是相同的,而不管本地偏移的系統設定如何(當然要考慮時鐘精度)。
要將時間戳決議為本地,請洗掉 Z:
let diff = new Date('2022-04-01T17:41:47.000') - Date.now();
但是,這會將時間戳表示的時間瞬間移動到本地偏移量,因此將為具有不同偏移量的每個系統回傳不同的diff值。考慮到時間戳有一個偏移量,這似乎不是一件明智的事情,因此它旨在表示一個單一的時間瞬間,而不是許多不同瞬間中的一個(與不同的偏移量一樣多,如果歷史偏移量可能有數百個)包括)取決于主機偏移量。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/456824.html
標籤:javascript 日期 约会时间 毫秒 秒
