我已经实现了一个函数,该函数获取一个ISO 8601 duration字符串并计算一天的序列。
该函数因无效的持续时间字符串而挂起。这些字符串被解释为持续时间为零,因此该函数将构建无限序列["00:00","00:00",...]
。
timeSeq("PT12H")
// ["00:00", "12:00"]
timeSeq(undefined)
// hangs ....
零持续时间通过P0D
映射到duration.toISOString()
。我应该如何检查功能中的零持续时间?
const timeSeq = (durationString, format = "HH:mm") => {
const duration = moment.duration(durationString);
// function should return [] for zero duration
// ???
const current = moment().startOf("day");
const end = current.clone().add(1, "day").startOf("day");
const sequence = [];
while (current < end) {
sequence.push(current.format(format));
current.add(duration);
}
return sequence;
};
答案 0 :(得分:2)
您可以使用as
函数获得持续时间值,也可以使用asMilliseconds()
或as('milliseconds')
(或类似的吸气剂)。
此外,您可以使用moment.isDuration(obj)
检查对象是持续时间。
您可以使用类似这样的东西:
function isZeroDuration(dur){
if( !moment.isDuration(dur) ){
return true;
}
return dur.as('milliseconds') === 0;
}
[null, undefined, 'P0D', 'hello', 'P1D'].forEach((durationString) => {
const duration = moment.duration(durationString);
console.log(durationString, isZeroDuration(duration) );
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>