2010-10-29 57 views
1

我有一個格式爲YYMMDD的日期。無論如何,我可以在JavaScript中驗證它嗎? 通過驗證我並不是說像長度,字符等更容易的事情,而是如果日期存在於現實生活中。JavaScript驗證日期的存在

我希望有一個更快/更好的方法比分爲3個字符的2個字符和檢查每個單獨。

謝謝。

+2

000229有效期爲2000年,但1900年失效所以,你需要考慮你的日期範圍(http://en.wikipedia.org/wiki/Leap_year#Algorithm) – 2010-10-29 15:22:10

回答

3

嘗試將其轉換爲日期,如果它失敗,你會得到可怕的NaN那麼你知道它不是一個有效的日期字符串?不漂亮,但它應該工作

var myDate = new Date(dateString); 
// should write out NaN 
document.write("Date : " + myDate); 

You date string would have to be in a valid format for javascript我不認爲你有你的問題YYMMDD支持

+0

這是一個不錯的主意,並且有效地驗證每個塊。我可以得到缺少的YY使其成爲YYYYMMDD格式。我會放棄它並讓你知道。謝謝。 – Francisc 2010-10-29 15:29:52

1

格式YYMMDD不使用Javascript Date.parse支持,所以你必須做一些處理它像打破它的一部分。

我建議構建拆分它在3個2字符字符串的函數,然後建立一個美國式日期

MM/DD/YY,並嘗試分析與Date.parse。

如果它返回NaN以外的任何東西,那麼它是一個有效的日期。

+0

謝謝大衛。 – Francisc 2010-10-29 15:31:31

1

JavaScript中的Date解析器很沒用。它接受的實際格式在不同瀏覽器上有很大不同,唯一保證符合ECMAScript標準的格式是實現的toStringtoUTCString方法生成的任何格式。在ECMAScript第五版中,您還將獲得ISO-8166格式,該格式更接近您的格式,但仍不完全。

所以,最好的解決方案通常是自己解析它。

var y= parseInt(s.slice(0, 2), 10)+2000; 
var m= parseInt(s.slice(2, 4), 10)-1; 
var d= parseInt(s.slice(4, 6), 10); 
var date= new Date(Date.UTC(y, m, d)); 

現在你已經有了代表UTC輸入日期Date對象。但這還不夠,因爲Date的構造函數允許像13或40這樣的虛假月份纏繞。因此,要檢查某一天是一個真正的一天,轉換回年/月/日和比較:

var valid= date.getUTCFullYear()===y && d.getUTCMonth()===m && d.getUTCDate()===d;