用dd / mm / yyyy检查一个日期是否在另一个日期之前

时间:2014-04-03 12:25:24

标签: javascript validation date

我正在尝试验证日期选择器表单,以检查第一个选定日期是否在第二个选定日期之前,如下所示:https://www.dropbox.com/s/uwmx64vogm5viyp/Screenshot%202014-04-03%2014.20.38.png

我目前的做法是:

buildComparisonRule({
name: "dateBefore",
message: "You must select an end date that is after the start date",
validator: function(value, comparedTo){
    var FirstDate = new Date(value);
    var SecondDate = new Date(comparedTo);

    return FirstDate.getTime() < SecondDate.getTime();
}
});

var form = document.getElementById("datepicker_form");

validator(form, [{
    name: "start_date",
    rules: "dateBefore[end_date]"
}]).onError(function(errors){
    console.log(Object.keys(errors))
    for (var error in errors){
        //alert(errors[error])
    }
    $('#start_date').parent().addClass('error');
});

使用valkyr.js验证库。

问题是atm它只在DD / MM / YYYY的第一部分而不是整个字符串上验证。

有没有办法验证整个日期而不仅仅是它的一部分?

3 个答案:

答案 0 :(得分:2)

您正在使用Date构造函数错误。根据mozilla开发站点有4个构造函数

new Date(); // current date
new Date(value); // int value representing a date since 1 January 1970 00:00:00 UTC 
new Date(dateString); // using Date.parse();
new Date(year, month [, day, hour, minute, second, millisecond]); // see my example


function parseDate(date){
    var d = date.split("/");
    return new Date(d[2], d[1]-1, d[0];
}

var FirstDate = parseDate(value);

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

答案 1 :(得分:0)

您必须在创建日期对象之前格式化日期,请尝试以下方式:

validator: function(value, comparedTo){
   value = value.split(/\D+/g);
   comparedTo = comparedTo.split(/\D+/g);
   var FirstDate = new Date(value[2],value[1],value[0]);
   var SecondDate = new Date(comparedTo[2],comparedTo[1],comparedTo[0]);

   return FirstDate.getTime() < SecondDate.getTime();

}

答案 2 :(得分:0)

我不认为Date()可以正确地解析DD / MM / YYYY格式的日期。这不是让它读取整个字符串的问题;问题是它以一种你不想要的方式解释它的内容。

您可以从每个日期提取日,月和年,并将它们传递给构造函数日期(年,月,日)。其他解决方案如下所述:

how to parse a "dd/mm/yyyy" or "dd-mm-yyyy" or "dd-mmm-yyyy" formatted date string using JavaScript or jQuery

相关问题