【问题标题】:Date validation using moment.js is not giving error on giving invalid date使用 moment.js 的日期验证在给出无效日期时不会出错
【发布时间】:2017-02-09 06:49:23
【问题描述】:

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

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

【问题讨论】:

  • 0000 是根据ISO 8601 的有效年份,根据您的特定需求,您可能需要在moment().isValid() 调用之前添加额外的检查,检查年份并返回Invalid,如果它是@987654330 @.

标签: javascript angularjs validation momentjs


【解决方案1】:

原生 JS 日期对象也认为存在零年。 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;
            }

【讨论】:

  • 但我想将“0000”年的验证添加为无效日期,我该怎么做才能实现。
  • 添加验证日期应大于或等于 1-1-0001
  • 我无法验证日期 1-1-1001,因为它的读数为 1-1-1970,
  • 我也更新了我的 plunker 和问题,我添加的日期小于 1-1-0001 的逻辑无效,但它不起作用。你能看看吗
  • 我认为你的 plunker 工作正常。你能给出它现在不工作的日期吗
【解决方案2】:

您可能想要添加一个单独检查年份值的函数。我的解决方案并不优雅,但可以解决问题。

function checkYear (v) {
  v = v.split("-");
  if(v[2] === "0000"){
    return true;
  }
  /* or you could go for a year of your choice*/
  /*
  if(parseInt(v[2]) <= 1900){
    return true;
  }
  */
}

【讨论】:

    猜你喜欢
    • 2016-04-05
    • 1970-01-01
    • 2020-01-22
    • 2013-07-25
    • 1970-01-01
    • 2012-03-10
    • 2017-04-04
    • 2014-02-27
    • 1970-01-01
    相关资源
    最近更新 更多