Javascript 正在验证传入的值是否可以转换为日期
我有一个文本框,用户应该在其中输入格式为mm/dd/yyyy的日期。我正在努力确保情况是这样,并且它们不会以字符串形式传递。由于我在下面的代码中使用了new Date(),我可以理解startDate/endDate是日期,即使它们是无效的。。。所以基本上我在寻找正确的方法来进行验证Javascript 正在验证传入的值是否可以转换为日期,javascript,validation,types,Javascript,Validation,Types,我有一个文本框,用户应该在其中输入格式为mm/dd/yyyy的日期。我正在努力确保情况是这样,并且它们不会以字符串形式传递。由于我在下面的代码中使用了new Date(),我可以理解startDate/endDate是日期,即使它们是无效的。。。所以基本上我在寻找正确的方法来进行验证 function calculate() { var start = document.getElementById("start").value; var end = document.get
function calculate() {
var start = document.getElementById("start").value;
var end = document.getElementById("end").value;
var startDate = new Date(Date.parse(start));
var endDate = new Date(Date.parse(end));
var daysBetween = parseInt((endDate - startDate)/(24*3600*1000));
var er = document.getElementById("errorResult");
if(!(startDate instanceof Date) || !(endDate instanceof Date)) {
er.innerHTML = "Dates must be of the form mm/dd/yyyy";
return;
} else if (endDate<startDate) {
er.innerHTML = "End date must be after start date!";
return;
} else {
er.innerHTML = "";
}
函数计算(){
var start=document.getElementById(“start”).value;
var end=document.getElementById(“end”).value;
var startDate=新日期(Date.parse(start));
var endDate=新日期(Date.parse(end));
var daysBetween=parseInt((endDate-startDate)/(24*3600*1000));
var er=document.getElementById(“errorResult”);
如果(!(开始日期实例日期)| |!(结束日期实例日期)){
er.innerHTML=“日期的格式必须为mm/dd/yyyy”;
返回;
}else if(endDate使用正则表达式
if (!inputDate.match(/^\d{2}\/\d{2}\/\d{4}$/)) {
er.innerHTML = "Dates must be of the form mm/dd/yyyy";
return;
}
使用正则表达式
if (!inputDate.match(/^\d{2}\/\d{2}\/\d{4}$/)) {
er.innerHTML = "Dates must be of the form mm/dd/yyyy";
return;
}
你可以试试这个
function isValidDate(date)
{
var matches = /^(\d{2})[-\/\.](\d{2})[-\/\.](\d{4})$/.exec(date);
if (matches == null) return false;
var d = matches[2], m = matches[1], y = matches[3];
var newDate = new Date(y, m, d);
return newDate.getDate() == d && newDate.getMonth() == m && newDate.getFullYear() == y;
}
在函数中,可以检查
var start = document.getElementById("start").value;
var end = document.getElementById("end").value;
if ( isValidDate( start ) && isValidDate( end ) )
{
// valid
}
你可以试试这个
function isValidDate(date)
{
var matches = /^(\d{2})[-\/\.](\d{2})[-\/\.](\d{4})$/.exec(date);
if (matches == null) return false;
var d = matches[2], m = matches[1], y = matches[3];
var newDate = new Date(y, m, d);
return newDate.getDate() == d && newDate.getMonth() == m && newDate.getFullYear() == y;
}
在函数中,可以检查
var start = document.getElementById("start").value;
var end = document.getElementById("end").value;
if ( isValidDate( start ) && isValidDate( end ) )
{
// valid
}
这并不能直接回答您的问题,但如果您有选择,我建议您在进行大量日期操作/格式化/验证时使用moment.js:坚持使用两位数的日期和月份值很烦人,您应该接受2013年5月4日和2013年5月4日。我同意我的计划,但只是一般性地问了这个问题这并不能直接回答你的问题,但如果你有选择的话,我建议你在进行大量的日期操作/格式化/验证时使用moment.js:坚持使用两位数的日和月值是令人讨厌的,你应该接受2013年4月5日和2013年4月5日。我同意我的计划,但只是问问题请注意,OP使用的是美国特有的月/日/年格式,您的代码假定为日/月/年。还要注意,2013年5月4日在两个系统中都是“有效”日期,但表示不同的日期,您可能希望包含“.”作为分隔符。最后,要验证日期,您只需要测试任意两个值(例如,日期和月份),不是全部三个。但这并不有害。:-@RobG,非常感谢您为我指出日期格式和提示:-)请注意,OP使用的是特殊的美国月/日/年格式,您的代码假定为日/月/年。还请注意,2013年5月4日是“有效”的日期在两个系统中,但表示不同的日期,您可能希望包含“.”作为分隔符。最后,要验证日期,您只需要测试任意两个值(例如日期和月份),而不是全部三个值。但这不会造成任何伤害。:-@RobG,非常感谢您为我指出日期格式和提示:-)