我在使用應該在兩個日期之間顯示日期的功能時遇到問題
我已經確定了錯誤,它取決于開始日期的時間。
function getDatesInRange(startDate, endDate) {
const date = new Date(startDate.getTime());
const dates = [];
while (date <= endDate) {
dates.push(new Date(date));
date.setDate(date.getDate() 1);
}
return dates;
}
const d1 = new Date(doc.travel_start);
const d2 = new Date(doc.travel_end);
getDatesInRange(d1, d2)
travel_end: "2022-03-23T20:00:57.118Z" travel_start: "2022-03-20T05:59:57.118Z",
正確輸出:[ 2022-03-20T05:59:57.118Z, 2022-03-21T05:59:57.118Z, 2022-03-22T05:59:57.118Z, 2022-03-23T05:59:57.118Z ]
如果我將 travel_start 的時間戳更改為 23 小時,則我的陣列的最后一個日期丟失 [ 2022-03-20T21:59:57.118Z, 2022-03-21T21:59:57.118Z, 2022-03-22T21:59:57.118 Z]
我試圖通過 .setHours(0,0,0,0) 從 travel_start 中洗掉時間戳,但沒有成功。
uj5u.com熱心網友回復:
你走對了
setHours嘗試使用時區可能有問題setUTCHours;
并在任何計算之前重置開始和結束日期
試用:
function getDatesInRange(startDate, endDate) {
const start = new Date(new Date(startDate).setUTCHours(0, 0, 0, 0));
const end = new Date(new Date(endDate).setUTCHours(0, 0, 0, 0));
const date = new Date(start.getTime());
const dates = [];
while (date <= end) {
dates.push(new Date(date));
date.setDate(date.getDate() 1);
}
return dates;
}
const travel_start = "2022-03-20T05:59:57.118Z";
const travel_start2 ="2022-03-20T23:59:57.118Z";
const travel_end = "2022-03-23T20:00:57.118Z";
const res1 = getDatesInRange(travel_start, travel_end);
const res2 = getDatesInRange(travel_start2,travel_end);
console.log('res1', res1)
console.log('res2', res2)
uj5u.com熱心網友回復:
如果你不反對使用外部庫,date-fns它有很多有用的功能,包括你想做的事情。
例子:
import { eachDayOfInterval } from "date-fns";
function getDatesInRange(startDate, endDate) {
return eachDayOfInterval({
start: new Date(startDate),
end: new Date(endDate)
})
}
getDatesInRange(d1, d2)
否則,shutsman 的回答似乎是有道理的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/447506.html
標籤:javascript 节点.js 日期
上一篇:根據“日期”的值對字典串列進行排序,值的格式為dd-MON-YYYY(例如:15-APR-2021)
下一篇:上周日在VerticaSQL中?
