似乎只有一个moment()对象有一个isValid()方法来检查提供的数据的有效性。 moment.duration()对象有没有等价物?因为isValid()在持续时间上似乎不存在。
答案 0 :(得分:1)
我同意这似乎是一个遗漏。由于我有需要,我已经提出了以下解决方法来验证持续时间。洞察力是无效的持续时间,导致持续时间恰好为'P0D'。在这里分享一下:
durationIsValid(iso8601DurationString){
if(iso8601DurationString === 'P0D') return true;
return moment.duration(iso8601DurationString).toISOString() !== 'P0D';
}
希望这有帮助!
答案 1 :(得分:0)
在进行ISO8601解析的情况下,建议尝试使用moment.duration(myIso8601Duration)
进行解析,使用toISOString
从中再次获取ISO8601字符串,然后将其与myIso8601Duration
进行比较。如果它们不同,则输入可能无效。
答案 2 :(得分:0)
我使用的是 Moment 2.29。很容易测试有效性如果您的用例具有持续时间的最小有效长度。例如,dur.isValid() && dur.as("minutes") >= 1
涵盖印刷错误、使用 NaN
作为数字输入、传递无效的 ISO8601 字符串等,因为所有这些情况都会导致持续时间为零。 (如果零长度持续时间实际上对您的用例有意义,请查看其他答案以获得指导……但它们可能没有。)