Как сравнить отметку времени по часам, используя момент - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть следующая функция, которая отвечает за возвращение логического значения в зависимости от того, активен ли период среза или нет, на основе метки времени Unix, возвращаемой сервером.

Вот функция:

 export const isCutOffTimePeriod = function (currentDateTime) {
  const format = 'HH:mm a'
  const currentTime = moment(currentDateTime).utcOffset(-300)
  const openingTime = moment('8:00 am', format)
  const closingTime = moment('2:30 pm', format)


  return !currentTime.isBetween(openingTime, closingTime)
}

Я пишу тест в Jest для этой функции:

 it('Should allow a transfer between 8:30am and 2:30pm ', () => {
  const currentDateTime = mockData.dateTime.nineAm // 1527862941959 - Friday,June 1, 2018 9:22:21.959 AM GMT-05:00
  expect(Utils.isCutOffTimePeriod(currentDateTime)).toEqual(false)
})

Тест не пройден, даже несмотря на то, что выходные данные правильно хранятся в моменте, когда объект основан на журналахКак сравнить метку времени Unix с другим временем, основанным исключительно на часах и минутах?

1 Ответ

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

Вы можете использовать .startOf('minute') и .endOf('minute').Например:

И вы можете просто передать метку времени Unix непосредственно в Moment, чтобы создать объект, отражающий эту метку времени.Здесь:

function test(unixTimestampForComparasion) {
  const format = 'HH:mm a';
  var currentDateTime = moment(unixTimestampForComparasion);
  const openingTime = moment('8:00 am', format).startOf('minute');
  const closingTime = moment('2:30 pm', format).endOf('minute');
  
  return !currentDateTime.isBetween(openingTime, closingTime)
}

console.log(test(moment("08:00:20 am", 'HH:mm:ss a').valueOf()));
console.log(test(moment("2:30:20 pm", 'HH:mm:ss a').valueOf()));
console.log(test(moment("2:31:00 pm", 'HH:mm:ss a').valueOf()));

var testTimeAsUnixTimestamp = moment("2019-01-01 2:31:00 pm", 'HH:mm:ss a').valueOf();
console.log(testTimeAsUnixTimestamp);
console.log(test(testTimeAsUnixTimestamp));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.js"></script>

Пожалуйста, поймите, что вы инвертируете тест inBetween.Таким образом, результаты могут быть немного запутанными.Но они верны.

Также я удалил линию смещения локали, чтобы пример стал более понятным.Просто включите его снова ASA, и вы получите его на работу.

...