2017-02-09 71 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; 
    } 
    */ 
}