如何在兩種情況下使用moment.js:澳大利亞&美國時間格式?MomentJS:如何在MM/DD/YYYY和DD/MM/YYYY中解析日期
例如:
07/08/2017
- 好兩個時間格式,但是!
30/08/2017
- 是moment.js無效,但我能有這樣的日期時間
您可以點擊此處查看:
http://jsfiddle.net/rLjQx/2135/
如何在兩種情況下使用moment.js:澳大利亞&美國時間格式?MomentJS:如何在MM/DD/YYYY和DD/MM/YYYY中解析日期
例如:
07/08/2017
- 好兩個時間格式,但是!
30/08/2017
- 是moment.js無效,但我能有這樣的日期時間
您可以點擊此處查看:
http://jsfiddle.net/rLjQx/2135/
解析器是假設的形式XXXX-XXXX的數字是代表DD-MM-YYYY。如果你想讓它接受MM-DD-YYYY,那麼你需要指定這個。
如var now2 = moment('08/30/2017', 'MM-DD-YYYY').format('MMM DD h:mm A');
您還可以指定不同的格式數組,你想它接受,使其認識到這兩個:
var now2 = moment('08/30/2017', ['DD-MM-YYYY', 'MM-DD-YYYY']).format('MMM DD h:mm A');
+1,但請注意,時刻分析器(使用最新版本)只是回退到依賴於瀏覽器(因此不一致)的'new Date(string)'。此外,只需修改樣本中的格式,因爲您使用'-'而不是'/',並注意格式順序與模糊輸入相關(如問題中提到的「07/08/2017」)。 – VincenzoC
「解析器忽略非字母數字字符」:https://momentjs.com/docs/#/parsing/string-format/ –
當然,但如果您添加第三個參數以啓用嚴格解析,那麼您的日期無效,我認爲使用'['DD-MM-YYYY','MM-DD-YYYY']'而不是'['DD/MM/YYYY','MM/DD/YYYY']'沒有任何好處,那就是我指出了:)。 – VincenzoC
通過第二個參數來調用時刻指定
格式var now2 = moment('30/08/2017', 'DD/MM/YYYY').format('MMM DD h:mm A');
否則就沒有辦法了片刻知道
個在你撥弄你用的是非常舊的版本(2.2.1
),我建議將其升級到最新版本(2.18.1
)。
使用較新的版本,你將有一個棄用警告在控制檯:
棄用警告:提供的值不是在一個公認的RFC2822或ISO格式。時刻構造會回落到js Date(),這在所有瀏覽器和版本中都不可靠。非RFC2822/ISO日期格式不鼓勵,將在即將到來的主要版本中刪除。有關更多信息,請參閱http://momentjs.com/guides/#/warnings/js-date/。
繼鏈接(和moment(String)
文檔)後,您會發現必須指定正確解析字符串的格式。
正如比利雷利建議您可以使用moment(String, String[])
解析函數。請remeber是:
版本2.3.0開始,瞬間使用一些簡單的試探法來確定要使用的格式。爲了:
- 喜歡格式導致無效的日期有效日期。
- 更喜歡解析更多字符串而不是更少的格式,並且使用比less更多的格式,即更喜歡更嚴格的解析。
- 優先考慮數組中較早的格式。
所以07/08/2017
將被解釋的方式取決於格式的順序在陣列格式參數。
這裏有一些例子片段:
var now = moment('30/08/2017', ['MM/DD/YYYY','DD/MM/YYYY']);
var now2 = moment('08/30/2017', ['MM/DD/YYYY','DD/MM/YYYY']);
var now3 = moment('07/08/2017', ['MM/DD/YYYY','DD/MM/YYYY']);
console.log(now.format('MMM DD h:mm A')); // Aug 30 12:00 AM
console.log(now2.format('MMM DD h:mm A'));// Aug 30 12:00 AM
console.log(now3.format('MMM DD h:mm A'));// Jul 08 12:00 AM
var now4 = moment('30/08/2017', ['DD/MM/YYYY','MM/DD/YYYY']);
var now5 = moment('08/30/2017', ['DD/MM/YYYY','MM/DD/YYYY']);
var now6 = moment('07/08/2017', ['DD/MM/YYYY','MM/DD/YYYY']);
console.log(now4.format('MMM DD h:mm A')); // Aug 30 12:00 AM
console.log(now5.format('MMM DD h:mm A')); // Aug 30 12:00 AM
console.log(now6.format('MMM DD h:mm A')); // Aug 07 12:00 AM
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
理解,儘管'7月8日/ 2017'是*這兩種格式的有效*,它代表了兩種完全不同的日期(7月8日,8月7日)。 –