0

我有一个文本框,用户应该输入格式为 mm/dd/yyyy 的日期。我正在尝试确保是这种情况,并且它们不会传入字符串。由于我在下面的代码中使用 new Date() 我可以理解 startDate/endDate 是日期,即使它们是无效的......所以基本上我正在寻找正确的方法来进行此验证

  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 = "";
    }
4

2 回答 2

2

你可以试试这个

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
}

演示。

于 2013-05-27T22:03:47.430 回答
1

使用正则表达式

if (!inputDate.match(/^\d{2}\/\d{2}\/\d{4}$/)) {
  er.innerHTML = "Dates must be of the form mm/dd/yyyy";
  return;
}
于 2013-05-27T21:51:53.400 回答