在moment()。isValid()中24:00:00的行为

时间:2020-07-11 23:36:36

标签: momentjs

我正在使用moment().isValid()验证日期和时间,但是24:00:00的日期和时间验证无法正常工作。

console.log(moment('2020-07-02 24:00:00','YYYY-MM-DD HH:mm:ss',true).isValid());

我希望上述代码的结果为false,但实际行为为true。 如何实现上述现象以获得预期效果?

我们还对似乎相关的零件进行了测试,但在60分钟,60秒等时的行为符合预期。

// 24:00:00
console.log(moment('2020-07-02 24:00:00').isValid());                            //true
console.log(moment('2020-07-02 24:00:00','YYYY-MM-DD HH:mm:ss').isValid());      //true
console.log(moment('2020-07-02 24:00:00','YYYY-MM-DD HH:mm:ss',true).isValid()); //true (Unexpected)
console.log(moment('2020-07-02 24:00:00','YYYY-MM-DD hh:mm:ss',true).isValid()); //false
console.log(moment('2020-07-02 24:00:00','YYYY-MM-DD kk:mm:ss',true).isValid()); //true

// other
console.log(moment('2020-07-02 24:00:01','YYYY-MM-DD HH:mm:ss',true).isValid()); //false
console.log(moment('2020-07-02 24:01:00','YYYY-MM-DD HH:mm:ss',true).isValid()); //false
console.log(moment('2020-07-02 23:58:60','YYYY-MM-DD HH:mm:ss',true).isValid()); //false
console.log(moment('2020-07-02 23:59:60','YYYY-MM-DD HH:mm:ss',true).isValid()); //false
console.log(moment('2020-07-02 22:60:00','YYYY-MM-DD HH:mm:ss',true).isValid()); //false
console.log(moment('2020-07-02 23:60:00','YYYY-MM-DD HH:mm:ss',true).isValid()); //false
console.log(moment('2020-07-02 23:60:60','YYYY-MM-DD HH:mm:ss',true).isValid()); //false

1 个答案:

答案 0 :(得分:0)

这似乎是由以下问题引起的:

在ISO 8601中,“午夜”是一种特殊情况,可以同时称为“ 00:00”和“ 24:00”(可以这么说,隔日午夜和今天的午夜)。尽管从技术上讲不应“冒泡”,但这是完全有效的。


作为补充,current spec似乎不允许这样做:

午夜是一种特殊情况,可以称为“ 00:00”或“ 24:00”,除非ISO 8601-1:2019中不再允许使用“ 24:00” strong>。