如何使用小时按小时比较时间戳

时间:2019-04-17 18:57:25

标签: javascript react-native jestjs momentjs

我有以下函数,该函数根据服务器返回的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 个答案:

答案 0 :(得分:1)

您可以使用.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中就可以使用。