Javascript - 获取 2 个日期之间的日期数组

2022-08-30 00:31:23
var range = getDates(new Date(), new Date().addDays(7));

我希望“range”是一个日期对象数组,两个日期之间每天一个。

诀窍是它也应该处理月份和年份的边界。


答案 1
Date.prototype.addDays = function(days) {
    var date = new Date(this.valueOf());
    date.setDate(date.getDate() + days);
    return date;
}

function getDates(startDate, stopDate) {
    var dateArray = new Array();
    var currentDate = startDate;
    while (currentDate <= stopDate) {
        dateArray.push(new Date (currentDate));
        currentDate = currentDate.addDays(1);
    }
    return dateArray;
}

这是一个功能演示 http://jsfiddle.net/jfhartsock/cM3ZU/


答案 2

我看了上面的所有。最后写了我自己。你不需要时刻js本机 for 循环就足够了,并且最有意义,因为 for 循环的存在是为了计算某个范围内的值。

一个衬垫:

var getDaysArray = function(s,e) {for(var a=[],d=new Date(s);d<=new Date(e);d.setDate(d.getDate()+1)){ a.push(new Date(d));}return a;};

长版

var getDaysArray = function(start, end) {
    for(var arr=[],dt=new Date(start); dt<=new Date(end); dt.setDate(dt.getDate()+1)){
        arr.push(new Date(dt));
    }
    return arr;
};

列出介于以下日期之间的日期:

var daylist = getDaysArray(new Date("2018-05-01"),new Date("2018-07-01"));
daylist.map((v)=>v.toISOString().slice(0,10)).join("")
/*
Output: 
    "2018-05-01
    2018-05-02
    2018-05-03
    ...
    2018-06-30
    2018-07-01"
*/

从过去日期到现在的天数:

var daylist = getDaysArray(new Date("2018-05-01"),new Date());
daylist.map((v)=>v.toISOString().slice(0,10)).join("")