【问题标题】:Check if one date is before another with dd/mm/yyyy使用 dd/mm/yyyy 检查一个日期是否在另一个日期之前
【发布时间】:2014-04-03 12:25:24
【问题描述】:

我正在尝试验证日期选择器表单以检查第一个选定日期是否早于第二个选定日期,如下所示: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 的第一部分而不是整个字符串。

有什么方法可以验证整个日期,而不仅仅是其中的一部分?

【问题讨论】:

  • 以这种方式创建日期 date = new Date("dd/mm/yyyy") 返回无效的日期值

标签: javascript validation date


【解决方案1】:

您错误地使用了 Date 构造函数。根据 mozzila 开发网站,有 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

【讨论】:

    【解决方案2】:

    你必须在创建日期对象之前格式化你的日期,试试这个方法:

    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();
    

    }

    【讨论】:

      【解决方案3】:

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

      您可以从每个日期中提取日、月和年,并将它们传递给构造函数 Date(year,month,day)。此处描述了其他解决方案:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-24
        • 1970-01-01
        • 2010-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-22
        • 2016-01-02
        相关资源
        最近更新 更多