【问题标题】:Given a start and end date, create an array of the dates between the two给定开始日期和结束日期,创建两个日期之间的日期数组
【发布时间】:2011-08-18 21:07:39
【问题描述】:

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

<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。现在使用我的代码,它会创建一个包含两个值的数组:开始日期和结束日期。但我还想让数组包含介于两者之间的所有日期。我该怎么做?

【问题讨论】:

  • 请在发帖前自己尝试一下;对于这样的代码请求,这里的大多数人都会皱眉头。

标签: javascript jquery


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    试试看: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);
    

    【讨论】:

      【解决方案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)
              }
      

      【讨论】:

        【解决方案4】:

        试试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/

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            这对我也有用:

            $("#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。但即使是有意为之,为什么不把最后一天也删掉呢?至少这就是 while(s

            很抱歉,我可能错了,我从未使用过面向对象的编程,但试图理解为什么 a[0] 在第一次分配后在第二个循环中发生了变化,这让我非常疯狂。希望我没有那么错。谢谢。

            【讨论】:

              【解决方案7】:

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

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-12-17
                • 2018-10-16
                • 1970-01-01
                • 2020-12-23
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多