Loop through a date range with JavaScript

后端 未结 10 652
情话喂你
情话喂你 2020-11-30 17:46

Given two Date() objects, where one is less than the other, how do I loop every day between the dates?

for(loopDate = startDate; loopDate < e         


        
相关标签:
10条回答
  • 2020-11-30 18:18

    Based on Tom Gullen´s answer.

    var start = new Date("02/05/2013");
    var end = new Date("02/10/2013");
    
    
    var loop = new Date(start);
    while(loop <= end){
       alert(loop);           
    
       var newDate = loop.setDate(loop.getDate() + 1);
       loop = new Date(newDate);
    }
    
    0 讨论(0)
  • 2020-11-30 18:19

    Here simple working code, worked for me

    var from = new Date(2012,0,1);
    var to = new Date(2012,1,20);
        
    // loop for every day
    for (var day = from; day <= to; day.setDate(day.getDate() + 1)) {
          
       // your day is here
    
    }

    0 讨论(0)
  • 2020-11-30 18:22
    var start = new Date("2014-05-01"); //yyyy-mm-dd
    var end = new Date("2014-05-05"); //yyyy-mm-dd
    
    while(start <= end){
    
        var mm = ((start.getMonth()+1)>=10)?(start.getMonth()+1):'0'+(start.getMonth()+1);
        var dd = ((start.getDate())>=10)? (start.getDate()) : '0' + (start.getDate());
        var yyyy = start.getFullYear();
        var date = dd+"/"+mm+"/"+yyyy; //yyyy-mm-dd
    
        alert(date); 
    
        start = new Date(start.setDate(start.getDate() + 1)); //date increase by 1
    }
    
    0 讨论(0)
  • 2020-11-30 18:22

    Based on Tabare's Answer, I had to add one more day at the end, since the cycle is cut before

    var start = new Date("02/05/2013");
    var end = new Date("02/10/2013");
    var newend = end.setDate(end.getDate()+1);
    var end = new Date(newend);
    while(start < end){
       alert(start);           
    
       var newDate = start.setDate(start.getDate() + 1);
       start = new Date(newDate);
    }
    
    0 讨论(0)
  • 2020-11-30 18:27

    If startDate and endDate are indeed date objects you could convert them to number of milliseconds since midnight Jan 1, 1970, like this:

    var startTime = startDate.getTime(), endTime = endDate.getTime();
    

    Then you could loop from one to another incrementing loopTime by 86400000 (1000*60*60*24) - number of milliseconds in one day:

    for(loopTime = startTime; loopTime < endTime; loopTime += 86400000)
    {
        var loopDay=new Date(loopTime)
        //use loopDay as you wish
    }
    
    0 讨论(0)
  • 2020-11-30 18:30

    Let us assume you got the start date and end date from the UI and stored it in the scope variable in the controller.

    Then declare an array which will get reset on every function call so that on the next call for the function the new data can be stored.

    var dayLabel = [];

    Remember to use new Date(your starting variable) because if you dont use the new date and directly assign it to variable the setDate function will change the origional variable value in each iteration`

    for (var d = new Date($scope.startDate); d <= $scope.endDate; d.setDate(d.getDate() + 1)) {
                    dayLabel.push(new Date(d));
                }
    
    0 讨论(0)
提交回复
热议问题