2017-02-09 42 views
0

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

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

我已编辑的脚本, 但它毕竟是现在给错误的所有日期小于1970年1月1日,因为它正在日期1-1-0001为1 -1-1970所以它是根据它的验证, 也没有价值的日期,日期显示为无效,直到我输入的日期大于1-1-1970。 我想如果年份是0000,日期应该是无效的。有谁能够帮助我?我用上面的代码更新了我的运动员。

更新 -

现在我能够解决的日期问题,但我现在的问题是觉得─ 如果日期是空的还是错误是存在时的日期是空的,我不希望这样的错误,有什么条件我应该为此付出吗?请看看我更新的重拳。

答案 -

我能够做我的答案,因为我加了下面的条件 -

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

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

+2

'0000'是一个有效的年份按[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Years),为您的特定需求,你可能需要先'添加额外的检查moment()。isValid()'调用,检查year并返回'Invalid'(如果它的'0000')。 – Ankit

回答

1

本地JS Date对象自以为还有一年零。每ISO 8601年可接受零年,它使用天文年份编号。在这个系统中,0年1 = 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; 
      } 
+0

但我想添加年份'0000'的验证作为无效日期,我应该如何做到这一点。 – Aanchal

+0

添加验证日期应该大于或等于1-1-0001 – dev

+0

我无法对日期1-1-1001进行验证,因为它的读数为1-1-1970, – Aanchal

0

您可能想要添加一个函数来检查年份的值。我的解决方案并不高雅,但它确实有效。

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; 
    } 
    */ 
} 
相关问题