javascript - 使用 moment.js 进行日期验证不会在给出无效日期时给出错误

标签 javascript angularjs validation momentjs

我正在使用 Angular JS 进行验证。对于日期验证,我使用 moment.js 文件。我的问题是当我输入年份为“0000”的日期时,例如1-1-0000,它没有给出错误。我的指令代码如下-

app.directive("validDate", function () {
  return {
    require: "ngModel",
    restrict: "A", // Attributes only
    link: function (scope, elem, attr, ctrl) {
        ctrl.$validators.cValidDate = function(value) {
            if (value === undefined || value === null || value === "") {
                return true;
            }

            return moment(value, ["D-M-YYYY"], true).isValid();
        }
    }
}
});

有人可以帮我验证吗?我在这里创建了一个笨蛋- PLUNKER

我已经编辑了脚本, 但它现在仍然对小于 1-1-1970 的所有日期给出错误,因为它将日期 1-1-0001 作为 1-1-1970 所以它是根据它进行验证的, 另外,当日期中没有值时,日期将显示为无效,直到我输入大于 1-1-1970 的日期。 我想如果年份是 0000 日期应该无效。有谁能够帮助我?我已经用上面的代码更新了我的 plunker。

更新-

现在我能够解决日期问题,但我的问题是 - 如果日期为空仍然存在错误,当日期为空时我不希望出现此错误,我应该为此设置什么条件?请查看我更新的 plunker。

答案-

我能够做出答案,因为我添加了以下条件 -

    if(moment(value, ["D-M-YYYY"], true).isValid()){ 
               // condition
} else 
    return true;

在这里查看我的新插件 - https://plnkr.co/edit/uKcynQktBCKRYoN7xdM1?p=preview

最佳答案

原生 JS Date 对象也认为有零年。根据 ISO 8601 可以接受零年,它使用天文年份编号。在此系统中,年 0 = 公元前 1 年,年 -1 = 公元前 2 年,依此类推。

对于许多数据库来说并非如此。因此,最好设置一个日期,该日期必须大于您需要的主题中的验证。

if(moment(value, ["D-M-YYYY"], true).isValid())
            {

              //alert(moment(value, ["D-M-YYYY"], true).isSameOrAfter(moment("1-1-0001"), ["D-M-YYYY"], true));
              if(moment(value, ["D-M-YYYY"]).isSameOrAfter(moment("1-1-0000"), ["D-M-YYYY"]) )
                return true ;
              else
                return false;
            }else
            {
              return false;
            }

关于javascript - 使用 moment.js 进行日期验证不会在给出无效日期时给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42130062/

相关文章:

javascript - 使用 jquery 和 sqlite/json 的静态产品页面

javascript - Coverage.json 不是用 Jasmine RequireJS 和 Istanbul 生成的

javascript - 加载表单后初始化 dropzone

javascript - 使用 Angular ng-disable 验证两个输入之一

javascript - asp.net mvc datetime 通过客户端日期格式进行动态验证

java - 将图像作为多部分表单数据上传时对 FormDataContentDisposition 进行自定义验证

javascript - 在android webview中注入(inject)javascript

angularjs - IE 8 选择 n+1 索引

javascript - 如何在 AngularJS 中的独立组件之间建立通信

javascript - 为什么我的 angularjs 多选界面不起作用?