2017-03-29 52 views
6

我想用momentjs檢查無效的日期/時間字符串:如何處理momentjs棄用警告

var invalid = '2017-03-18 23;00;00'; 
if (moment(invalid).isValid()) { 
    return 'valid date' 
} 

這(正確)拋出與熟悉的「棄用警告堆棧跟蹤:提供的值不是在一個公認的RFC2822或ISO格式......」

但是即使我添加一個try/catch:

try { 
    var invalid = '2017-03-18 23;00;00'; 
    if (moment(invalid).isValid()) { 
    return 'valid date' 
    } 
catch (err) { 
    throw Error ('invalid date format'); 
} 

堆棧跟蹤仍在印刷。 我需要做些什麼來避免打印堆棧跟蹤?

我已經在StackOverflow上搜索了所有類似的問題,但他們都試圖解決不同的問題(修復輸入或找到解析輸入的正確語法)。

我使用v2.18.1。

回答

15

您必須使用moment(String, String);來解析您的輸入。如果您不想指定格式(或array of formats),則可以使用moment.ISO_8601。由於文檔說:

時刻已經支持解析ISO-8601字符串,但可以明確的格式格式/列表構建了一會兒

這樣你就不必棄用時,可以指定警告。在這裏工作的例子:

var invalid = '2017-03-18 23;00;00'; 
 
if (moment(invalid, moment.ISO_8601).isValid()) { 
 
    console.log('valid date'); 
 
} else { 
 
    console.log('invalid date'); 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

PS。無論如何,如果你有一個可接受的格式列表,我建議使用moment(String, String[]);(如果需要的話,嚴格解析)。

+0

是的!!!這樣可行。謝謝。我打算查看接受格式的列表。 – hepabolu