如何验证 moment.js 持续时间?

sch*_*cki 5 duration momentjs

似乎只有 moment() 对象有一个 isValid() 方法来检查所提供数据的有效性。moment.duration() 对象是否有任何等价物?因为 isValid() 似乎不存在于持续时间。

vic*_*tcu 2

我同意这似乎是一个瞬间的遗漏。由于我有需要,我想出了以下验证持续时间的解决方法。我们的见解是,无效的持续时间会导致持续时间恰好为“P0D”。只是在这里分享一下:

durationIsValid(iso8601DurationString){
  if(iso8601DurationString === 'P0D') return true;
  return moment.duration(iso8601DurationString).toISOString() !== 'P0D';
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

  • 如果您有意创建零长度的持续时间,这将不起作用。当 moment 获得无效的持续时间单位时,它默认为零。因此,在这种情况下,这会给您带来假阴性结果。(在发表此评论时,当前版本为 2.20.1。希望未来版本中会有更好的持续时间验证)。相关验证在此模块中:https://github.com/moment/moment/blob/develop/src/lib/duration/constructor.js (3认同)