簡體   English   中英

在解析格式錯誤的日期時,moment.js正在做一些奇怪的事情

[英]moment.js is doing weird things when parsing a badly formatted date

如果我將YYYY-MM-17指定為moment.js的日期,則表示它是有效日期:

var myMoment = moment('YYYY-MM-17', 'YYYY-MM-DD');

console.log(myMoment.isValid()); // -> true

console.log(myMoment.get('year')); // -> 2017
console.log(myMoment.get('month')); // -> 0
console.log(myMoment.get('day')); // -> 0

https://jsfiddle.net/seu6x3k3/3/

我也在不同的瀏覽器上看到不同的結果。 根據文件

...我們首先檢查字符串是否與已知的ISO 8601格式匹配,然后如果找不到已知格式則返回到new Date(string)

這不是我所看到的。 使用相同格式本機指定日期時:

var date = new Date('YYYY-MM-17'); // -> NaN

console.log(date.getYear()); // -> NaN
console.log(date.getMonth()); // -> NaN
console.log(date.getDay()); // -> NaN

https://jsfiddle.net/3p5x1qn3/

事實證明有一個嚴格的選擇。 來自文檔

Moment的解析器非常寬容,這可能會導致不良行為。 從版本2.3.0開始,您可以為最后一個參數指定一個布爾值,以使Moment使用嚴格的解析。 嚴格的解析要求格式和輸入完全匹配。

var myMoment = moment('YYYY-MM-17', 'YYYY-MM-DD', true);

console.log(myMoment.isValid()); // -> false

console.log(myMoment.get('year')); // -> 2016
console.log(myMoment.get('month')); // -> 4
console.log(myMoment.get('day')); // -> 0

https://jsfiddle.net/seu6x3k3/5/

暫無
暫無

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

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