用moment.js检查零持续时间

时间:2018-12-12 10:26:54

标签: javascript momentjs

我已经实现了一个函数,该函数获取一个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;
};

1 个答案:

答案 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>