我正在尝试验证日期选择器表单,以检查第一个选定日期是否在第二个选定日期之前,如下所示: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的第一部分而不是整个字符串上验证。
有没有办法验证整个日期而不仅仅是它的一部分?
答案 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格式的日期。这不是让它读取整个字符串的问题;问题是它以一种你不想要的方式解释它的内容。
您可以从每个日期提取日,月和年,并将它们传递给构造函数日期(年,月,日)。其他解决方案如下所述: