我有一個文本字段,其中用戶輸入的日期時間格式爲:dd/mm/YYYY hh:ii
。我想檢查這是否是一個有效的日期時間使用JavaScript。這應該包括二月29日和一切。我怎樣才能做到這一點?由於特殊的月份,正則表達式不會成功。JS檢查有效的日期格式
回答
請參閱http://internotredici.com/article/checkdateinjavascript/瞭解有關檢查時間的有用文章 - 正是您想要的!
下面是文章
入住日期的全文在JavaScript 條下腳本 程序員經常需要驗證插入信息表格並檢查其正確性於2006年1月31日公佈的是從JavaScript有用乘虛而入。本教程將解釋如何使用JavaScript來驗證日期是否有效。 表單中的日期以兩種不同的方式插入,第一種使用文本字段,其中用戶輸入不同模式的數據(本教程中我們假設日期格式爲dd-mm-yyyy);第二個使用下拉菜單。第一種解決方案更容易實現,但用戶可能會遇到更多錯誤(例如,插入無效字符或更頻繁地使用與已計劃格式不同的格式輸入日期)。現在,我們有以下的文本字段 假設中,我們要插入的DD-MM-yyyy格式的日期:
<form id="test_form" action="get" method="/checkdatejavascript"
onsubmit="return(check_form(this)); return false;">
<input type="text" name="datefield" id="datefield" />
</form>
要檢查插入數據的正確性,我們將使用check_form功能:
function check_form()
{
// Regular expression used to check if date is in correct format
var pattern = new RegExp([0-3][0-9]-(0|1)[0-9]-(19|20)[0-9]{2});
if(document.getElementById('datefield').value.match(pattern))
{
var date_array = document.getElementById('datefield')
.value.split('-');
var day = date_array[0];
// Attention! Javascript consider months in the range 0 - 11
var month = date_array[1] - 1;
var year = date_array[2];
// This instruction will create a date object
source_date = new Date(year,month,day);
if(year != source_date.getFullYear())
{
alert('Year is not valid!');
return false;
}
if(month != source_date.getMonth())
{
alert('Month is not valid!');
return false;
}
if(day != source_date.getDate())
{
alert('Day is not valid!');
return false;
}
}
else
{
alert('Date format is not valid!');
return false;
}
return true;
} 正如我們所看到的,用藍色表示的正則表達式用於控制插入日期是否遵循默認分配格式。如果模式有效,則函數繼續執行下一步,否則會引發錯誤消息。abd表單不發送(正則表達式保證此日期不能爲空)。 驗證日期我們將使用JavaScript提供的Date對象。 (檢查以紅色證明的代碼)。該算法非常簡單。使用用戶插入的信息,我們將創建一個Date對象,並使用getFullYear,getMonth和getDate方法,我們將生成三個值,分別表示與其關聯的年份,月份和日期。如果這些值等於用戶插入的值,那麼日期是正確的。現在考慮下面的例子:
用戶插入的文本字段從字符串創建的字符串1976年9月1日 Date對象是1976年9月1日 日期是有效的
用戶插入的文本字段中的字符串31從字符串創建-02-2006 Date對象是2006年3月3日 日期是無效
程序員不得不採取特別注意(檢查綠色證明的代碼)在JavaScript處理日期的方式,因爲幾個月被認爲是在0到11的範圍內,假設o是1月,11是12月。 在下拉菜單的情況下,使用插入日期,控制是更簡單的,由於這樣的事實,正則表達式並不需要驗證日期格式:
<form id="test_form" action="get" method="/checkdatejavascript"
onsubmit="return(check_form(this)); return false;">
<select name="dateday" id="dateday">
<option value="1">1</option>
[…]
</select>
<select name="datemonth" id="datemonth">
<option value="0">January</option>
[…]
</select>
<select name="dateyear" id="dateyear">
<option value="2006">2006</option>
[…]
</select>
</form>
將CONTROLL日期正確性JavaScript函數是
function check_form()
{
var day = document.getElementById('dateday').value;
var month = document.getElementById('datemonth').value;
var year = document.getElementById('dateyear').value;
// This instruction will create a date object
source_date = new Date(year,month,day);
if(year != source_date.getFullYear())
{
alert('Year is not valid!');
return false;
}
if(month != source_date.getMonth())
{
alert('Month is not valid!');
return false;
}
if(day != source_date.getDate())
{
alert('Day is not valid!');
return false;
}
return true;
}
更新:我更新了代碼,因爲正則表達式存在問題。感謝Alex的建議
如果鏈接關閉,這個答案是無用的。 – Mathletics
@Mathletics我用完整的代碼更新了答案。 –
如果使用moment.js沒問題,您可以檢查http://momentjs.com/docs/#/parsing/string-format/的日期時間解析實用程序。例如:
moment("29/02/2014 11:45", "DD/MM/YYYY hh:mm", true).isValid()
如果你不想使用其他外部庫,你可以使用下面的功能:
var validateDate = function(dateTime){
var f_date = dateTime.split(" ")[0].split("/").reverse().join("/");
var time = dateTime.split(" ")[1];
var date = dateTime.split(" ")[0].split("/").map(function(c, i, a){
return parseInt(c);
});
var daysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
if ((!(date[2] % 4) && date[2] % 100) || !(date[2] % 400)) {
console.log("inside");
daysInMonth[1] = 29;
}
if(date[0] > 0 && (date[0] <= daysInMonth[(date[1]-1)]) && date[1] > 0 && date[1] <= 12){
return new Date(f_date + " " + time) != "Invalid Date";
}
return false;
}
這會照顧閏年的變化也。只有輸入格式爲dd/mm/YYYY hh:ii
時,此功能纔有效。 你可以嘗試一些像這樣的採樣輸入:
validateDate("29/2/2000 12:30"); // Should return true
validateDate("29/2/2001 12:30"); // Should return false
validateDate("32/8/2000 12:30"); // Should return false
validateDate("30/11/2000 12:30"); // Should return true
validateDate("31/4/2000 12:30"); // Should return false
validateDate("15/7/2000 12:77"); // Should return false
- 1. 有效的日期格式檢查Oracle - 奇怪的行爲
- 2. C + +檢查有效的日期時間格式
- 3. 如何檢查yyyyMM格式的有效日期
- 4. 檢查日期驗證的日期格式大於當前日期以及js
- 5. 檢查日期格式
- 6. JS - 日期檢查
- 7. 格式日期()的JS
- 8. 日期的格式無效
- 9. 無效的日期格式
- 10. 檢查特定格式的日期
- 11. 檢查不同的日期格式
- 12. 檢查日期的格式在PHP
- 13. JS日期格式和日期比較
- 14. 角JS格式日期
- 15. 日期格式錯誤JS
- 16. 格式日期是JS
- 17. 使用SAS宏檢查有效日期
- 18. 檢查是否有效Jquery日期
- 19. 檢查有效日期選擇器
- 20. 有效日期在Oracle中檢查
- 21. 檢查有效日期類型
- 22. 檢查日期是否有效
- 23. 檢查一個有效日期
- 24. PHP檢查有效日期,奇怪的日期轉換
- 25. 解析前檢查日期格式
- 26. 日期時間格式檢查php
- 27. 日期時間格式檢查
- 28. 在JavaScript中檢查日期格式
- 29. howto禁用日期格式檢查?
- 30. 日期格式:無效月
如果您使用JQuery看到:http://jqueryui.com/datepicker/ – QuentinUK
@RachelGallen請提交此作爲一個答案。 QuentinUK:這很好,但不是我所要求的。 – Keelan
@CamilStaps - 完成! –