首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >moment.js -验证日期>日期和<1年后从今天开始

问moment.js -验证日期>日期和<1年后从今天开始
EN

Stack Overflow用户
提问于 2017-06-27 10:02:46
回答 1查看 1.3K关注 0票数 0

我正在使用moment.js来验证测试表单上的日期字段。

日期必须大于今天,但不大于365天形成今天。

我已经尝试过许多方法来使这段代码正常工作,但是我看不到我的错误。

代码不允许用户输入从今天到一年之间的日期。有效日期提供以下错误消息:“日期必须大于今天。”

我不确定问题是我使用moment.js还是js代码。

,有人能看到我在这里犯的错误吗?

这是我的代码:

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-27 10:06:25

您可以使用矩isAfter和isBefore来比较矩对象,而不是<和>。

在文档的查询部分中,有一个由矩提供的比较矩对象的方法列表。(例如isBetween、isSameOrBefore、isSameOrAfter等)

您的代码可以如下所示:

代码语言:javascript
复制
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;
}

这里有一个带有一些测试输入的活片段:

​

代码语言:javascript
复制
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');
代码语言:javascript
复制
<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。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44777460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档