moment().isValid()での24時00分00秒の挙動について


moment().isValid()で日時の妥当性検証を実施しているのですが、24時00分00秒の日時妥当性検証が想定通り動作しません。

[code]

    // HH（=00～23）を想定している厳密比較なのでtrueは想定外
    console.log(moment('2020-07-02 24:00:00','YYYY-MM-DD HH:mm:ss',true).isValid()); //true
    
[/code]

私としては、上記コードの判定結果は`false`となってほしいのですが、実際の挙動は`true`になってしまします。  
上記現象は、どのように実装すれば想定通りの結果を得ることができますでしょうか？

関連しそうな箇所のテストも実施しましたが`60分`、`60秒`等の挙動は想定通りでした。

[code]

    // ----------------------------
    //  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
    
    // HH（=00～23）を想定している厳密比較なのでtrueは想定外
    console.log(moment('2020-07-02 24:00:00','YYYY-MM-DD HH:mm:ss',true).isValid()); //true
    
    // hh（=01～12）を想定している厳密比較なのでfalseは想定内
    console.log(moment('2020-07-02 24:00:00','YYYY-MM-DD hh:mm:ss',true).isValid()); //false
    
    // kk（=01～24）を想定している厳密比較なのでtrueは想定内
    console.log(moment('2020-07-02 24:00:00','YYYY-MM-DD kk:mm:ss',true).isValid()); //true
    
    // ----------------------------
    //  その他のfalseの確認
    // ----------------------------
    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
[/code]

[code]

    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/moment.min.js"></script>
[/code]

`moment`の`2.27.0`を利用しています。




  * [Is there any workaround for handle datetime format as "24:00" #1174](https://github.com/moment/moment/issues/1174#issuecomment-25950746) \- moment/moment

によると、ISO 8601によって `24:00(:00)` は midnight
の表現として妥当である、と定められているため質問文にあるような挙動になっているようです。

当時の変更差分は[こちら](https://github.com/moment/moment/pull/1965/files)のようですが、少なくともこの時点では何らかの設定によって挙動を変える、というようなことは不可能そうです。  
(追記:
[現在の最新版コード](https://github.com/ichernev/moment/blob/d40760af83da2684cbfed136cafa7c943d397f92/moment.js#L1891)でも同様のように見えます)

* * *

補足:

ただし、上記のissueは2013年のものですが、現在の[該当Wikpediaの記述](https://en.wikipedia.org/wiki/ISO_8601#Times)では次のように更新されており、最新(2019年改訂？)の仕様では
`24:00` は許可されなくなっているようです。

> Midnight is a special case and may be referred to as either "00:00" or
> "24:00", except in ISO 8601-1:2019 where "24:00" is no longer permitted.

