我試圖做一個基本的日期計算,如下所示。鑒于以下引數,我想找到該月的剩余天數。
我以為我確定了一個解決方案,但答案中似乎多出了 1/4。
// returns last day of month
function lastDayOfMonth(date) {
return new Date(date.getFullYear(), date.getMonth() 1, 0)
}
let day_start = new Date('2018-11-04');
let day_end = new Date('2019-01-10');
let day_last = lastDayOfMonth(day_start);
let total = 0;
if (day_end <= day_last) {
total = day_end - day_start;
} else {
total = day_last - day_start;
}
console.log(total / (1000 * 60 * 60 * 24)); // returns 26.25
uj5u.com熱心網友回復:
差異來自UTC偏移量,因為正如您所寫的那樣,day_start并且day_end是UTC午夜,但day_last在您當地的時區是午夜。
要修復,只需在 UTC 中進行所有計算。由于day_last它是唯一一個是本地的,因此這是您唯一需要調整的一個。為了在 UTC 中產生這個,你可以使用setUTCFullYear和相關的方法(遺憾的是我不相信有辦法用Date建構式來做到這一點):
// returns last day of month
function lastDayOfMonth(date) {
// Set correct date in UTC:
let last_date = new Date();
last_date.setUTCFullYear(date.getFullYear());
last_date.setUTCMonth(date.getMonth() 1);
last_date.setUTCDate(0);
// Zero out the time so that this will end up as midnight:
last_date.setUTCHours(0);
last_date.setUTCMinutes(0);
last_date.setUTCSeconds(0);
last_date.setUTCMilliseconds(0);
return last_date;
}
let day_start = new Date('2018-11-04');
let day_end = new Date('2019-01-10');
let day_last = lastDayOfMonth(day_start);
let total = 0;
if (day_end <= day_last) {
total = day_end - day_start;
} else {
total = day_last - day_start;
}
console.log(total / (1000 * 60 * 60 * 24)); // returns 26 flat
uj5u.com熱心網友回復:
Date使用該格式的建構式使用您new Date(year, month, day)的本地時區進行評估。DateISO 8601 字串的建構式YYYY-MM-DD以 UTC 進行評估。
您可以通過以 ISO 8601 格式列印本地日期并將其傳遞到新構建的 Date 物件來解決此問題。
function lastDayOfMonth(date) {
let localDate=new Date(date.getFullYear(), date.getMonth() 1, 0);
let m=localDate.getMonth();
let d=localDate.getDate();
return new Date(localDate.getFullYear() '-' (m<10?'0':'') m '-' (d<10?'0':'') d);
}
uj5u.com熱心網友回復:
Date 物件發生了一些奇怪的事情。它并不總是回傳時間為 00:00:00,這就是為什么你在答案中得到額外的 1/4。
這是一個如何修復它的簡單示例。
new Date("2011-09-24");
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF AS BEFORE.
new Date("2011/09/24"); // change from "-" to "/".
// => Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
有關更多資訊,請參閱這個問題 -這個問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/451445.html
標籤:javascript 日期
下一篇:MySQL獲取上個月的特定日期
