簡體   English   中英

moment.js函數在節點中為日期格式“ dddd Do MMM”返回NaN

[英]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.

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