moment.js - 验证日期>今天和<从今天起1年

时间:2017-06-27 10:02:46

标签: javascript momentjs

我正在使用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;
}

1 个答案:

答案 0 :(得分:1)

您可以暂时使用isAfterisBefore来比较时刻对象,而不是<>

在文档的Query部分,有一个方法列表,用于比较时刻对象。 (例如isBetweenisSameOrBeforeisSameOrAfter等)

您的代码可能如下所示:

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