簡體   English   中英

moment.js在三月和八月的最后一天返回“無效日期”

[英]moment.js returns “Invalid date” for last day of March and August

當我將Year,Month,Day作為字符串傳遞到moment.js日期構造函數中以獲取月份的最后一天時,它將返回3月和8月的“無效日期”:

moment(["2022","0","31"]).toISOString()
"2022-01-31T06:00:00.000Z"
moment(["2022","1","28"]).toISOString()
"2022-02-28T06:00:00.000Z"

//March
moment(["2022","2","31"]).toISOString()
"Invalid date"

moment(["2022","3","30"]).toISOString()
"2022-04-30T05:00:00.000Z"
moment(["2022","4","31"]).toISOString()
"2022-05-31T05:00:00.000Z"
moment(["2022","5","30"]).toISOString()
"2022-06-30T05:00:00.000Z"
moment(["2022","6","31"]).toISOString()
"2022-07-31T05:00:00.000Z"

//August
moment(["2022","7","31"]).toISOString()
"Invalid date"

moment(["2022","8","30"]).toISOString()
"2022-09-30T05:00:00.000Z"
moment(["2022","9","31"]).toISOString()
"2022-10-31T05:00:00.000Z"
moment(["2022","10","30"]).toISOString()
"2022-11-30T06:00:00.000Z"
moment(["2022","11","31"]).toISOString()
"2022-12-31T06:00:00.000Z"

但是,當我為Month參數指定一個整數時,這些日期有效:

//March
moment(["2022",2,"31"]).toISOString()
"2022-03-31T05:00:00.000Z"

//August
moment(["2022",7,"31"]).toISOString()
"2022-08-31T05:00:00.000Z"

我想知道為什么當我將Month參數作為字符串與整數傳遞時會發生這種情況嗎?

原來是升級到最新版本的moment.js修復了它。

舊的中斷示例( v2.7.0 ): https : //jsfiddle.net/1Lwauz1t/1/

最新版本的工作示例( v2.18.1 ): https : //jsfiddle.net/dsadkpsa/

這是上面指向jsfiddle的鏈接中正在執行的代碼:

console.log(moment(["2022","2","31"]).toISOString());
console.log(moment(["2022",2,"31"]).toISOString());
console.log(moment(["2022","7","31"]).toISOString());
console.log(moment(["2022",7,"31"]).toISOString());

感謝@cochsen向正確的方向推進。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM