我正在使用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;
}
答案 0 :(得分:1)
您可以暂时使用isAfter
和isBefore
来比较时刻对象,而不是<
和>
。
在文档的Query部分,有一个方法列表,用于比较时刻对象。 (例如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