Search code examples
javascriptdatetimemomentjsdate-rangemoment-range

Split a datetime range in individual day slots e.g. access the number of minutes for each individual day present in a datetime range


I have a start date object and an end date object in javascript e.g.

var startDate = moment("2019-04-22T09:20:00+05:00");
var endtDate = moment("2019-04-25T11:00:00+05:00");

now I want to have an output like this

[880,1440,660] //array for the numbers of minutes for each day present in the given range

I have tried something using moment range module but still in vain

Thanks for the help in advance


Solution

  • Try this code.

    var startDate = moment("2019-04-22T09:20:00+05:00");
    var endDate = moment("2019-04-25T11:00:00+05:00");
    
    var duration = moment.duration(endDate.diff(startDate));
    var days = Math.round(duration.asDays());
    
    
    var start,end;
    var minutes = [];
    
    for(i = 0; i<=days; i++){
      if(i == 0){
        start = startDate;
        end = moment(startDate).endOf("day").utcOffset("+05:00");
      }else if(i == days){
        start = moment(endDate).startOf('day').utcOffset("+05:00");
        end = endDate;
      } else {
        start = moment(startDate).add('days', i).startOf('day').utcOffset("+05:00");
        end = moment(startDate).add('days', i).endOf('day').utcOffset("+05:00");
      }
      
      var duration = moment.duration(end.diff(start));
      var min = duration.asMinutes();
    
      minutes.push(Math.round(min))
    }
    
    console.log(minutes)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js"></script>
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>