2017-07-07 56 views

回答

3

解析器是假設的形式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');

+0

+1,但請注意,時刻分析器(使用最新版本)只是回退到依賴於瀏覽器(因此不一致)的'new Date(string)'。此外,只需修改樣本中的格式,因爲您使用'-'而不是'/',並注意格式順序與模糊輸入相關(如問題中提到的「07/08/2017」)。 – VincenzoC

+0

「解析器忽略非字母數字字符」:https://momentjs.com/docs/#/parsing/string-format/ –

+0

當然,但如果您添加第三個參數以啓用嚴格解析,那麼您的日期無效,我認爲使用'['DD-MM-YYYY','MM-DD-YYYY']'而不是'['DD/MM/YYYY','MM/DD/YYYY']'沒有任何好處,那就是我指出了:)。 – VincenzoC

2

在你撥弄你用的是非常舊的版本(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>