我正在使用moment.js来验证测试表单上的日期字段。
日期必须大于今天,但不大于365天形成今天。
我已经尝试过许多方法来使这段代码正常工作,但是我看不到我的错误。
代码不允许用户输入从今天到一年之间的日期。有效日期提供以下错误消息:“日期必须大于今天。”
我不确定问题是我使用moment.js还是js代码。
,有人能看到我在这里犯的错误吗?
这是我的代码:
var ensureLeadingEmploymentDateValid = function(dateFormat, inputSelector) {
var today = new moment();
var todayPlusOneYear = new moment().add(365, 'days');
var dateInput = $(inputSelector);
var dateValue = dateInput.val();
var dateMoment = null;
if (dateValue.length > 0) {
var dateMoment = moment(dateValue, dateFormat);
if (dateMoment < today) {
var message = '{% trans "Date must be greater than today." %}';
setParsleyErrorOnCondition(dateInput, dateMoment < today, message);
} else if (dateMoment > todayPlusOneYear) {
var message = '{% trans "Date must not be greater than 1 year from today." %}';
setParsleyErrorOnCondition(dateInput, dateMoment > todayPlusOneYear, message);
}
}
return dateMoment;
}发布于 2017-06-27 10:06:25
您可以使用矩isAfter和isBefore来比较矩对象,而不是<和>。
在文档的查询部分中,有一个由矩提供的比较矩对象的方法列表。(例如isBetween、isSameOrBefore、isSameOrAfter等)
您的代码可以如下所示:
var ensureLeadingEmploymentDateValid = function(dateFormat, inputSelector) {
var today = new moment();
var todayPlusOneYear = new moment().add(365, 'days');
var dateInput = $(inputSelector);
var dateValue = dateInput.val();
var dateMoment = null;
if (dateValue.length > 0) {
var dateMoment = moment(dateValue, dateFormat);
if (dateMoment.isBefore(today)) {
var message = '{% trans "Date must be greater than today." %}';
setParsleyErrorOnCondition(dateInput, dateMoment < today, message);
} else if (dateMoment.isAfter(todayPlusOneYear)) {
var message = '{% trans "Date must not be greater than 1 year from today." %}';
setParsleyErrorOnCondition(dateInput, dateMoment > todayPlusOneYear, message);
}
}
return dateMoment;
}这里有一个带有一些测试输入的活片段:
var ensureLeadingEmploymentDateValid = function(dateFormat, dateValue) {
var today = new moment();
var todayPlusOneYear = new moment().add(365, 'days');
//var dateInput = $(inputSelector);
//var dateValue = dateInput.val();
var dateMoment = null;
if (dateValue.length > 0) {
var dateMoment = moment(dateValue, dateFormat);
if (dateMoment.isBefore(today)) {
var message = '{% trans "Date must be greater than today." %}';
console.log(dateValue, message);
//setParsleyErrorOnCondition(dateInput, dateMoment < today, message);
} else if (dateMoment.isAfter(todayPlusOneYear)) {
var message = '{% trans "Date must not be greater than 1 year from today." %}';
console.log(dateValue, message);
//setParsleyErrorOnCondition(dateInput, dateMoment > todayPlusOneYear, message);
} else {
console.log(dateValue, "date ok");
}
}
return dateMoment;
}
ensureLeadingEmploymentDateValid('MM/YYYY', '05/2017');
ensureLeadingEmploymentDateValid('MM/YYYY', '08/2017');
ensureLeadingEmploymentDateValid('MM/YYYY', '07/2018');<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
注意,像06/2017这样使用moment('06/2017', 'MM/YYYY')解析的输入将被解释为2017-06-01 00:00:00。
https://stackoverflow.com/questions/44777460
复制相似问题