我有一個格式爲YYMMDD的日期。無論如何,我可以在JavaScript中驗證它嗎? 通過驗證我並不是說像長度,字符等更容易的事情,而是如果日期存在於現實生活中。JavaScript驗證日期的存在
我希望有一個更快/更好的方法比分爲3個字符的2個字符和檢查每個單獨。
謝謝。
我有一個格式爲YYMMDD的日期。無論如何,我可以在JavaScript中驗證它嗎? 通過驗證我並不是說像長度,字符等更容易的事情,而是如果日期存在於現實生活中。JavaScript驗證日期的存在
我希望有一個更快/更好的方法比分爲3個字符的2個字符和檢查每個單獨。
謝謝。
嘗試將其轉換爲日期,如果它失敗,你會得到可怕的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
支持
這是一個不錯的主意,並且有效地驗證每個塊。我可以得到缺少的YY使其成爲YYYYMMDD格式。我會放棄它並讓你知道。謝謝。 – Francisc 2010-10-29 15:29:52
格式YYMMDD不使用Javascript Date.parse支持,所以你必須做一些處理它像打破它的一部分。
我建議構建拆分它在3個2字符字符串的函數,然後建立一個美國式日期
MM/DD/YY,並嘗試分析與Date.parse。
如果它返回NaN以外的任何東西,那麼它是一個有效的日期。
謝謝大衛。 – Francisc 2010-10-29 15:31:31
JavaScript中的Date
解析器很沒用。它接受的實際格式在不同瀏覽器上有很大不同,唯一保證符合ECMAScript標準的格式是實現的toString
和toUTCString
方法生成的任何格式。在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;
000229有效期爲2000年,但1900年失效所以,你需要考慮你的日期範圍(http://en.wikipedia.org/wiki/Leap_year#Algorithm) – 2010-10-29 15:22:10