2017-03-02 151 views
1

我想解析JavaScript中的日期,但特定的格式給我適合。我從我的信用卡公司導出了數據,日期字段的格式與Date.parsemoment().isValid()不兼容。解析日期「2016年1月1日星期五」

E.g.

Date.parse("01/01/2016 Fri") // NaN 
moment("01/01/2016 Fri") // false 

我不知道我是否應該做些什麼用正則表達式.test().matches()因爲這是被用於CSV導入實用程序,後者的日期可能是在不同的格式。我很驚訝上面的效用函數不起作用。

+0

如果一週中的某一天不重要,您可以修剪'Fri'來留下有效的日期字符串。星期幾可以重新計算或「拆分」,以便它仍然可以訪問。 – Jake

+0

有多少種日期格式?你能列出問題中的所有格式嗎? –

回答

0

in the Moment docs看看如何解析任何格式的日期。第一個參數是日期字符串,第二個參數是格式字符串。字母數字字符被忽略,所以你不必擔心斜槓與破折號。

moment("01/01/2016 Fri", "MM-DD-YYYY ddd)

+1

「Alpha * numeric *」表示數字也 – pinkfloydx33

+0

@ pinkfloydx33是正確的,文檔實際上說非字母數字字符被忽略。 'ddd'應該讓你解析每週的一天作爲輸入的一部分。 – Cass

0

退房的Mozilla MDN on Date.parse()

解析()方法接受一個日期字符串(如 「1995年12月25日」)和毫秒的 回報的人數自1月1日, 1970,00:00:00 UTC。此功能對於根據字符串 值(例如,結合setTime()方法和Date對象設置日期值很有用。

給定一個表示時間的字符串,parse()返回時間值。它 接受RFC2822/IETF日期語法(RFC2822第3.3節),例如 「星期一,1995年12月25日13:30:00 GMT」。它瞭解大陸US 時區的縮寫,但是對於一般用途,使用時區偏移量,例如,「星期一,1995年12月25日13:30:00 +0430」(格林威治以東4小時30分 ),例如 子午線)。

由此看來,它看起來像你的問題是你給的日期的格式不正確:

它 接受RFC2822/IETF日期語法(RFC2822 3.3節),例如 「星期一,1995年12月25日13:30:00 GMT」。

檢查了這一點:根據所提供的瀏覽器和值,例如在日期字符串

無效的值不被識別爲ISO格式由ECMA-262所定義的可能或可能不導致NaN時,:

// Non-ISO string with invalid date values 
new Date('23/25/2014'); 

TL; DR - 你傳遞的價值觀中無法識別的格式,這就是爲什麼它返回NaN的。

嘗試此來源的日期爲正則表達式:Regexlib.com。該網站有點過時,但信息很好。它具有用於不同日期格式的大量不同的Regexes。

+0

您似乎沒有引用最重要的部分:「***不推薦使用Date.parse ... ***」。 – RobG

+0

@RobG謝謝!我會解決它。 –

相關問題