2016-06-09 43 views
1

給定日期字符串,如何獲取描述日期字符串的格式字符串?在javascript或者momentjs中獲取給定的日期格式(指定格式的字符串)

換言之,如果沒有傳遞一個明確的格式來使用,我怎樣才能得到格式字符串Date()或MomentJS(可能每個都不相同,這很好)用來解析日期字符串?

因此給出'2016-01-01'它應該輸出類似'YYYY-MM-DD'的東西。

(我知道這是一個簡單的問題,可能有一個答案的地方,但它是很難字簡潔,所以我只能找到有關如何解析datestrings或如何顯示日期。無如何的問題和答案以輸出格式本身。)

回答

1

Matt Johnson's answer,一些意見,和我自己的貢獻整合信息。

使用Moment.js(版本2.10.7+),您可以使用Creation Data API。像這樣的事情在Node.js的:

moment('2016-01-01 00:00:00').creationData().format 

輸出

'YYYY-MM-DD HH:mm:ss' 

正如任何日期解析是,有大約由於東西如本地化(月的訂單很多datestrings的格式不確定性例如,美國和歐洲之間的交換日期)。但上述方法對我來說已經足夠了。

2

你不能,而無需額外的信息,如區域設置。例如,01/12/16可能是2016年1月12日,2016年12月1日或2001年12月16日。

即使您知道區域設置,現實世界中也有幾個地方使用多種日期格式,取決於上下文。

https://en.wikipedia.org/wiki/Date_format_by_country

不過,如果你只是想確定的多個已知格式之一來解析輸入字符串,時刻對那個叫Creation Data的API。例如:

var m = moment("2016/06/10", ["YYYY-MM-DD", "MM/DD/YYYY"], true); 
var f = m.creationData().format; // "MM/DD/YYYY" 
+0

當然,但多個選項之一必須能夠被選擇,因爲他們可以解析這些字符串。所以,是的,這有一個模棱兩可的問題,但是可以做出選擇,並且由於解析器的存在已經隱含地做出了選擇。 – tscizzle

+0

由於源系統和目標系統的位置可能沒有多大幫助,我認爲* format *在這裏比* locale更好。 ;-) – RobG

+0

@ tscizzle-沒有你剛纔猜測的格式。雖然某些格式比其他格式具有更高的「成功」機會,但可以解析03/04/05之類的字符串以生成至少3個有效但不同的日期。請參閱[*退回到Date構造函數*時要小心](https://github.com/moment/moment/issues/1407)(可能應該是* ...回到Date.parse *)。 – RobG