我得到了一個這樣的 unix 時間戳:1655402413并且我需要找到同一周的星期一的午夜(以 UTC/GMT 格式),無論它是哪一天或哪個時區。然后我需要將該星期一表示為一個 unix 時間戳并回傳它。我的功能如下:
function findMonday(unixTimeStamp) {
let startDate = new Date(unixTimeStamp);
let startDay = startDate.getDay();
let diff = startDate.getDate() - startDay (startDay === 0 ? -6 : 1);
let monday = new Date(startDate.setDate(diff));
monday.setHours(0, 0, 0, 0);
monday = new Date(monday).valueOf();
return monday;
}
該功能幾乎可以作業,但有兩個問題,都與 Date 似乎總是與用戶當前時區一起作業的事實有關:
- 如果給定的時間戳以 UTC/GMT 格式計算為星期一的午夜,則取決于用戶的時區,它將回傳前一周的星期一(因為
startDate計算為星期一之前的星期日),這是不好的。 - 回傳的
monday是本地時間,而不是 UTC/GMT 時間。
這讓我徹底瘋了。在 JavaScript 中處理日期是一場噩夢,如果您能給我任何指導,我將不勝感激。
uj5u.com熱心網友回復:
將 unix 時間戳乘以 1000,并使用 UTC 方法,如getUTCDate代替getDate,setUTCHours代替setHours等。
當然要以 unix 時間回傳,只需除以 1000。
例如。
function findMonday(unixTimeStamp) {
let startDate = new Date(unixTimeStamp * 1000);
let startDay = startDate.getUTCDay();
let diff = startDate.getUTCDate() - startDay (startDay === 0 ? -6 : 1);
let monday = new Date(startDate.setUTCDate(diff));
monday.setUTCHours(0, 0, 0, 0);
monday = new Date(monday).valueOf();
return monday;
}
const monday = findMonday(1655402413);
const unixMonday = Math.trunc(monday / 1000);
console.log('The Date: ' new Date(monday).toISOString());
console.log('Unix time: ' unixMonday);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/492072.html
標籤:javascript 日期 约会时间
上一篇:橢圓的邊在大位圖上被切割?
