我有以下函数,该函数根据服务器返回的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时间戳与其他时间进行比较?
答案 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中就可以使用。