给定一个开始日期和结束日期,创建一个包含这两个日期之间日期的数组

Given a start and end date, create an array of the dates between the two

本文关键字:日期 一个 两个 之间 包含这 数组 开始 结束 创建      更新时间:2023-09-26

现在,我的页面上有这个:

<script type="text/javascript">
    $(document).ready(function () {
        var days = [
            { Date: new Date($('#hfEventStartDate').val()) },
            { Date: new Date($('#hfEventEndDate').val()) }
        ];
    });
</script>
<asp:HiddenField ID="hfEventStartDate" runat="server" />
<asp:HiddenField ID="hfEventEndDate" runat="server" />

我在页面加载时设置hfEventStartDate和hfEventEndDate。现在用我的代码,它创建了一个有两个值的数组:开始日期和结束日期。但我还想让数组包含所有中间的日期。我该怎么做呢?

您可以使用setDate(getDate() + 1)来'迭代'所有天:http://jsfiddle.net/pimvdb/4GeFD/1/.

$("#hfEventStartDate").val(new Date - 24 * 3600 * 1000 * 7 - 1);
$("#hfEventEndDate").val(new Date - 0);
function getAllDays() {
    var s = new Date($('#hfEventStartDate').val() - 0);
    var e = new Date($('#hfEventEndDate').val() - 0);
    var a = [];
    while(s < e) {
        a.push(s);
        s = new Date(s.setDate(
            s.getDate() + 1
        ))
    }
    return a;
};
alert(getAllDays().join("'n"));

试试吧:jsFiddle

var date1 = new Date();
var date2 = new Date(2010, 0, 1);
var day;
var between = [date1];
while(date2 <= date1) {
    day = date1.getDate()
    date1 = new Date(date1.setDate(--day));  
    between.push(date1);
}
console.log(between);
        start = new Date("August 13,2011");
        future = new Date("October 13, 2011");
        range = []
        mil = 86400000 //24h
        for (var i=start.getTime(); i<future.getTime();i=i+mil) {
          range.push(new Date(i))
       //or for timestamp
       //range.push(i)
        }

try moment .js and twix

var itr = moment.twix(new Date('2012-01-15'),new Date('2012-01-20')).iterate("days");
var range=[];
while(itr.hasNext()){
    range.push(itr.next().toDate())
}
console.log(range);

生活:http://jsfiddle.net/aswani/GNPQc/

我已经阅读了给出的答案,这是我得出的结论。注意,我是从@pimvdb

的答案开始的
// return an array composed of a list of the days' number 
// from 1 month ago until today, not included
function getAllDays() {
 var e = moment();
 var s = moment().subtract('months', 1);
 var a = []
  // While the updated start date is older, perform the loop.
  while(s.isBefore(e)) {
   // Update the format according to moment js documentations format().
   a.push(s.format("MMM - DD"));
   s = s.add('days', 1);
  }
 return a;
}

只需在代码的任何地方调用该函数:

getAllDays();

参见:MomentJs library

这对我来说也很有效:

$("#hfEventStartDate").val(new Date - 24 * 3600 * 1000 * 7 - 1);
$("#hfEventEndDate").val(new Date - 0);
function getAllDays() {
    var s = new Date($('#hfEventStartDate').val() - 0);
    var e = new Date($('#hfEventEndDate').val() - 0);
    var a = [];
    while(s <= e) {
        a.push(new Date(s));
        s.setDate(s.getDate() + 1);
    }
    return a;
};
alert(getAllDays().join("'n"));

与pimvdb发布的代码相同,但做了一些小的修改,但它给出了不同的结果。我花了4个小时试图理解为什么,这就是我认为发生在pimvdb代码:

1 loop
a[0] = S1 = $("#hfEventStartDate").val(new Date - 24 * 3600 * 1000 * 7 - 1);
//2013-09-01
2 loop
a[0] = s1.setDate(s1.getDate() + 1); // 2013-09-02
a[1] = s2 = new Date(s1.setDate(s1.getDate() + 1)) // 2013-09-02
3 loop
a[0] = s1; // 2013-09-02
a[1] = s2.setDate(s2.getDate() + 1); // 2013-09-03
a[2] = s3 = new Date(s2.setDate(s2.getDate() + 1)) // 2013-09-03
and so on...

我不确定这是否是pimvdb故意的,但他的代码遗漏了起始日期,在我的示例中是2013-09-01。但即使是有意的,为什么不把最后一天也省略掉呢?至少当(s <)E)似乎是打算的,但是最后一天包含在最后一个数组中。

我很抱歉我可能是错的,我从来没有使用过面向对象编程,但是试图理解为什么[0]在第一个循环中被分配后在第二个循环中被更改,这让我完全疯了。希望我没说错。谢谢你。

您也可以使用间隔来做您想做的事情。

var tstamp = 0;

function timer() {
    console.log(tstamp);
    tstamp = new Date().getTime()
}
var i = setInterval(timer, 1000);
//when no more needed
clearInterval(i)