2016-03-14 96 views
1

我知道這已被問了好幾次,但我問,因爲淘寶上網幾個小時後,我還沒有找到一個可行的解決方案,不包括使用Javascript庫。Javascript函數來檢查字符串是否是有效的日期

我只是在尋找一種方法來測試一個字符串是否是一個有效的日期。我是從C#(JSON.NET)傳遞的Javascript中綁定數據。傳回的有效日期時間格式爲'2083-01-01T00:00:00'。我發現的所有函數都說這是無效的,因爲它們沒有包含時間戳部分,或者它們不夠嚴格,並且說這個字符串'Testing 21215'是一個有效的日期。

什麼是我可以用來驗證這種格式,而不使用庫的解決方案?

+0

你試過了一個簡單的'new Date(valueInQuestion)'嗎? – Tomalak

+0

@Tomalak是的,我有。新日期('測試21215')將返回一個日期。這不是我想要的。 – user2023116

+0

我明白了。 Date構造函數能夠識別什麼值在JS實現之間變化很大。如果你想要一個可預測的,可靠的結果,使用庫變得幾乎不可避免。 – Tomalak

回答

1

如果您確保格式始終採用ISO標準格式,則可以使用正則表達式將結構測試爲字符串。如果你願意,你可以瘋狂地詳細描述這個,或者嘗試下面的內容。

var dateRegexp = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/ 
var matches = dateString.match(dateRegexp) 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match

有可能是其他完全不同的方法爲好。我的首選方法是嘗試使用新的Date(字符串)方法;如果這個分析正確的話,那麼你可以將其轉換回ISO串

var dateString = "2016-03-18T00:00:00"; 
var date = new Date(dateString); 
console.log(date.toISOString()); 

但是,您可能需要知道爲國際用戶的這個含義。

+0

如果沒有其他人有更靈活的解決方案,我可能會以此爲結局。對於我的情況,我可以有把握地說,如果它不是ISO格式,那麼我不希望被認爲是有效的。 – user2023116

+0

爲了澄清我之前的評論,正則表達式就是我要實現的。新的Date方法不起作用,因爲它會將字符串「Testing 21215」強制爲一個日期,這不是我想要的。 – user2023116

+0

對,很明顯。這不是一個很好的解決方案,但是如果它通過正則表達式測試,你仍然可以使用它來規範化日期時間字符串。 –

相關問題