Search code examples
javascriptmomentjsdate-comparison

Compare only timepart in moment object


I want to compare only the time part in a moment object. I have included a Snippet that at the moment does not work as intended. The filter function is not working properly. I want to filter out all dates that either has the start hour set before 07:00 or end hour set after 19:00. I Also get a deprecated warning that I can't really figure out the cause of. Thanks for all the help

var arrayOfWorkDates = [{
  start: "2018-05-02T07:00:00Z",
  end: "2018-05-02T09:00:00Z"
}, {
  start: "2018-05-02T019:00:00Z",
  end: "2018-05-02T21:00:00Z"
}, {
  start: "2018-05-02T010:00:00Z",
  end: "2018-05-02T11:00:00Z"
}];

console.log(arrayOfWorkDates);

var StartHour = moment("07:00", "HH:mm");
var EndHour = moment("19:00", "HH:mm");

var filteredWokrHours = arrayOfWorkDates.filter(function(el) {

  return moment(el.start).isBefore(StartHour) || moment(el.end).isAfter(EndHour);
});

if(filteredWokrHours.length > 0){console.log("success: " + filteredWokrHours.length);}else{console.log("fail");}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.min.js"></script>


Solution

  • Solved it like this.

    var format = "HH:mm:ss";
    var hourFormat = "HH:mm";
    var maxStartHour = moment("07:00:00", format);
    var minEndHour = moment("19:00:00", format);
    
    var arrayOfWorkDates = [
    
      {
        start: "2018-02-24T14:00:00",
        end: "2018-02-24T15:00:00"
      },
      {
        start: "2018-02-24T05:00:00",
        end: "2018-02-24T06:00:00"
      },
      {
        start: "2018-02-24T20:00:00",
        end: "2018-02-24T21:00:00"
      }
    ];
    
    
    var filteredWokrHours = arrayOfWorkDates.filter(function(el) {
    
      var start = moment(el.start).format(hourFormat);
      var end = moment(el.end).format(hourFormat);
    
      var checkHourStart = moment(start, format);
      var checkHourEnd = moment(end, format);
    
      return checkHourStart.isBefore(maxStartHour) || checkHourEnd.isAfter(minEndHour);
    });
    
    if(filteredWokrHours.length > 0){console.log("success: " + filteredWokrHours.length);}else{console.log("fail");}
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.min.js"></script>