[英]moment.js function returning NaN for date format “dddd Do MMM” in node
我偶然發現了node.js環境中moment.js的一個有趣問題。 基本上,我想從紀元獲取日期格式為“ 8月24日星期五”的時間,但結果是我收到了NaN。 這是我的node.js代碼:
const moment = require("moment");
console.log(moment("Friday 24th Aug", "dddd Do MMM").valueOf());
moment.js version: 2.23.0
nodejs version: v8.11.3
OS: Linux 16.04.1-Ubuntu
如果我在瀏覽器上嘗試使用相同的控制台行,則效果很好。
有人偶然發現這樣的東西嗎?
編輯:對此鏈接表示歉意,我使用了一個已經創建的jsfiddle,它的moment.js版本為:2.2.1。 似乎在該版本中“有效”,但現在已更改: http : //jsfiddle.net/fy8w62on/ (moment.js 2.2.1版)
Friday 24th Aug
不包含年份,因此片刻必須猜測是哪一年,並使用當前年份進行猜測。
如果在運行代碼時是2018年,則valueOf
將不會返回NaN
。
但這是2019年,因此2019年Friday 24th Aug
無效。
valueOf()
給出NaN
原因是您的矩對象( moment("Friday 24th Aug", "dddd Do MMM"
) 無效) 。
請注意,如docs的Default部分所述:
您可以創建一個矩對象,僅指定某些單位,其余的將默認為當前日期,月份或年份,或者小時,分鍾,秒和毫秒的默認值為0。
因此moment嘗試創建一個代表2019-08-24
(使用當年)的實例,但是它創建了一個Invalid Date
因為2019-08-24
是星期六(使用默認的英語美國語言環境),而不是星期五(其他人已經在評論)。
使用parsingFlags
您將看到weekdayMismatch
設置為true
var m = moment("Friday 24th Aug", "dddd Do MMM"); console.log(m.valueOf()); // NaN console.log(m.format()); // Invalid date console.log(m.parsingFlags()); // Object with "weekdayMismatch": true
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js"></script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.