给定开始日期和结束日期,创建两者之间的日期数组

时间:2011-08-18 21:07:40

标签: javascript jquery

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

<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。现在使用我的代码,它会创建一个包含两个值的数组:开始日期和结束日期。但是我想让数组中包含所有日期。我怎么能这样做?

7 个答案:

答案 0 :(得分:18)

您可以使用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"));

答案 1 :(得分:7)

这是一个go: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);

答案 2 :(得分:3)

        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)
        }

答案 3 :(得分:3)

尝试momment.jstwix

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/

答案 4 :(得分:2)

我已经阅读了给出的答案,这就是我的结果。 请注意,我从@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

答案 5 :(得分:0)

这也适合我:

$("#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&lt; e)看起来的目的,但最后一天包含在最后一个数组中。

对不起,我可能错了,我从未使用面向对象的编程,但是试图理解为什么[0]在已经被分配到第二个循环后在第二个循环上被改变了让我绝对疯了。希望我没错。谢谢。

答案 6 :(得分:0)

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

var tstamp = 0;


function timer() {

    console.log(tstamp);
    tstamp = new Date().getTime()
}

var i = setInterval(timer, 1000);

//when no more needed
clearInterval(i)