需要帮助使用javascript验证过去的日期是否过去

时间:2013-06-23 09:20:13

标签: javascript regex

您好我目前仍然坚持如何分割我的正则表达日期,然后测试输入的日期是否已过去。如果是的话我想提醒一下。

我知道我需要拼接我的正则表达式,但我不确定如何做到这一点任何帮助将不胜感激。下面是我的脚本到目前为止它是一个相当长的正则表达式,但它涵盖了包括闰年在内的一切,但就像我说我知道需要通过substr或splice来分解它。

//start of datefield
var dateformat=/^(?:(?:31\/(?:0[13578]|1[02])|(?:29|30)\/(?:0[13-9]|1[012])|(?:0[1-9]|1\d|2[0-8])\/(?:0[1-9]|1[0-2]))\/[2-9]\d{3}|29\/02\/(?:[2-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[3579][26])00))$/;

if (!date.match(dateformat))
{
    alert("format incorrect use dd/mm/yyyy make sure you are entering correct days to the month remember 30 days have september, april, june & november, only 28 days in february unless leap year next is 2016");
    return false;
}
//end date field

2 个答案:

答案 0 :(得分:1)

简单

date = "12/11/2009";
if(new Date(date) < new Date()){
     // a
} else {
     // b
}

答案 1 :(得分:1)

使用正则表达式来确定日期是有效还是在其他时间之前或之后并不是最简单的工作方式。将字符串转换为日期对象并测试它会更容易。

因此解析字符串以创建日期对象并从那里开始。您不应该将日期字符串解析为日期对象,因为它主要取决于实现(ECMA-262指定ISO8601的版本,但所有正在使用的浏览器都不支持)。因此,如果你的格式为d / m / y,你可以这样做:

function isDateHistory(s) {
  s = s.split('/');
  return (new Date(s[2], --s[1], s[0])) < (new Date());
}

alert(isDateHistory('15/6/2013')); // true
alert(isDateHistory('15/7/2013')); // false

您还可以使用以下方式验证日期:

function validateDate(dateString) {
  var s = dateString.split('/');
  var d = new Date(s[2], --s[1], s[0]);
  return d && d.getFullYear() == s[2] && d.getDate() == s[0];
}