我有一个文本字段,用户可以在其中输入以下格式的日期时间:dd/mm/YYYY hh:ii
。我想使用 javascript 检查这是否是有效的日期时间。这应该包括 2 月 29 日和所有内容。我怎样才能做到这一点?由于特殊月份,正则表达式不会成功。
最佳答案
参见 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;
} 正如我们所见,以蓝色显示的正则表达式用于控制插入日期是否遵循默认指定格式。如果模式有效,则函数继续下一步,否则会引发错误消息,并且不会发送表单(正则表达式保证日期不能为空)。 为了验证日期,我们将使用 javascript 提供的 Date 对象。 (检查以红色显示的代码)。该算法非常简单。使用用户插入的信息,我们将创建一个 Date 对象,并使用 getFullYear、getMonth 和 getDate 方法,我们将生成三个值,分别代表与其关联的年、月和日。如果这些值与用户输入的值相同,则日期正确。现在考虑以下示例:
用户在文本字段中插入字符串 09-01-1976 从字符串创建的日期对象是 09-01-1976 日期有效
用户在文本字段中插入字符串 31-02-2006 从字符串创建的日期对象是 03-03-2006 日期无效
程序员必须特别注意 javascript 处理日期的方式(检查以绿色显示的代码),因为假设 o 是 1 月,11 是 12 月,月份被认为在 0 到 11 的范围内。 在使用下拉菜单插入日期的情况下,控件更简单,因为不需要正则表达式来验证日期格式:
<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>
控制日期正确性的 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 的建议
关于javascript - JS 检查有效的日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14693298/