获取 2 个日期之间的所有日期 Javascript
Get all Dates between 2 Dates Javascript
我在使用本应显示两个日期之间的日期的功能时遇到问题
我已经确定了错误,这取决于开始日期的时间。
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.118Z
]
我试图通过 .setHours(0,0,0,0) 从 travel_start 中删除时间戳,但没有成功。
你走对了
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)
如果您不反对使用外部库,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's回答似乎有道理。
我在使用本应显示两个日期之间的日期的功能时遇到问题
我已经确定了错误,这取决于开始日期的时间。
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.118Z ]
我试图通过 .setHours(0,0,0,0) 从 travel_start 中删除时间戳,但没有成功。
你走对了
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)
如果您不反对使用外部库,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's回答似乎有道理。