Проверьте, если дата / время между двумя другими датой / временем Javascript - PullRequest
0 голосов
/ 25 апреля 2019
var startDateTime = '15.04.2019 00:15';
var endDateTime = '17.05.2019 18:35';

var checkDateTime = '16.04.2019 13:15';

function(checkDateTime, startDateTime, endDateTime) {

// need codes to return true or false,.
// check "checkDateTime" is between "startDateTime" to "endDateTime"

}

Ответы [ 4 ]

2 голосов
/ 25 апреля 2019

Попробуйте этот код:

var startDateTime = getDate('15.04.2019 00:15');
var endDateTime = getDate('17.05.2019 18:35');

var checkDateTime = getDate('16.04.2019 13:15');

function isBetween(checkDateTime, startDateTime, endDateTime) {

    return (checkDateTime >= startDateTime &&  checkDateTime <= endDateTime);

}

function toDate(str){
  var [ dd, MM, yyyy, hh, mm ] = str.split(/[. :]/g);
  return new Date(`${MM}/${dd}/${yyyy} ${hh}:${mm}`);
}

console.log(isBetween(checkDate,startDate,endDate));

Чтобы сравнить его, один раз попадает между временным интервалом в тот же день, используйте: -

var startTime = "00:35";
var endTime = "18:15";
var checkTime = "13:00";

function getMinutes(timeString){
    let [hh, mm] = timeString.split(":");
    return parseInt(hh)*60 + parseInt(mm);
}

function isTimeBetween(checkTime,startTime,endTime){
      checkTime = getMinutes(checkTime);
      return (checkTime >= getMinutes(startTime) && checkTime <= getMinutes(endTime));
}
console.log(isTimeBetween(checkTime,startTime,endTime));
1 голос
/ 25 апреля 2019

Вот еще одна опция, которая добавляет метод непосредственно к прототипу Date:

var startDateTime = new Date('04/15/2019 00:15');
var endDateTime = new Date('05/17/2019 18:35');

var checkDateTime = new Date('04/16/2019 13:15');
var outOfRangeDate_EARLY = new Date('01/16/2019 13:15');
var outOfRangeDate_LATE = new Date('06/16/2019 13:15');

Date.prototype.inRange = function(startDate, endDate){
  var this_ms = this.getTime();
  return ( this_ms >= startDate.getTime() && this_ms <= endDate.getTime() )
}

/* Tests */
console.log('expected: true', 'actual:', checkDateTime.inRange(startDateTime, endDateTime))
console.log('expected: false', 'actual:', outOfRangeDate_EARLY.inRange(startDateTime, endDateTime))
console.log('expected: false', 'actual:', outOfRangeDate_LATE.inRange(startDateTime, endDateTime))

Таким образом, с любой датой у вас var someDate, вы можете просто позвонить someDate.inRange(startDate, endDate).Иногда, однако, возня с нативными прототипами может вернуться к вам, если не проявить осторожность.Если это так, то иметь отдельную функцию, отвеченную другими, очень хорошо.

Наконец, очень важно, чтобы строки даты были правильно отформатированы перед созданием объектов Date, в противном случае вы встретите Invalid Dateмного.Надеюсь, это поможет.

1 голос
/ 25 апреля 2019

Я бы посоветовал проверить, больше ли ваш checkDateTime, чем ваш startDateTime, и меньше, чем endDateTime.

function checkDateTime(checkDateTime, startDateTime, endDateTime) {
  return (new Date(startDateTime) >= new Date(checkDateTime))
      && (new Date(checkDateTime) <= new Date(endDateTime));
}
1 голос
/ 25 апреля 2019

Вы можете использовать new Date (). GetTime (), чтобы получить количество миллисекунд с начала Unix.Так что вы можете сравнить дату / время с результатом этой функции.Вы можете сделать вот что:

return new Date(startDateTime).getTime() <= new Date(checkDateTime).getTime() <= new Date(endDateTime).getTime();

Проверьте это: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime

...