2017-02-14 166 views
0

我試圖根據出生日期計算年齡,但出於某種原因它正在正常工作。角度:計算出生日期的年齡基數

這裏是角代碼:

數據從http請求到來。

$scope.dob = data.dob; 

樣本數據 - 02-01-1990。 (DD-MM-YYYY)。

$scope.calculateAge = function calculateAge(birthday) { // birthday is a date 
    var ageDifMs = Date.now() - birthday.getTime(); 
    var ageDate = new Date(ageDifMs); // miliseconds from epoch 
    return Math.abs(ageDate.getUTCFullYear() - 1970); 
} 

這就是我如何使用。

{{ calculateAge(dob) }} 

請指教。

+0

變種d =新的日期( 「1990年2月1日」)不解析。你過去了嗎?這個問題我不清楚。 –

+0

「它失敗」是什麼意思?你有錯誤嗎?你得到一個不正確的結果?還有其他事情發生嗎?你的問題並不完全清楚。 – Claies

+0

由於您的birthDate爲「dd-mm-yyyy」格式,而Date()類不理解此格式,因此它失敗或不會產生期望的結果。所以日期差異不會輸出預期的結果。即birthday.getTime()將輸入日期評估爲1990年2月1日(mm-dd-yyyy)格式。嘗試使用moment.js將日期轉換爲通用基本形式。 – RRM

回答

1

ageDifMs的區別是毫秒,這樣你就可以根據一年的毫秒數很容易地計算出不同:

return Math.floor(ageDifMs/1000/60/60/24/365); 

此外,如果您使用的是02-01-1990格式,你不能把這個給new Date。相反,我建議使用用於JavaScript的moment庫,該庫也可以輕鬆地從提供的格式創建日期,並使用任何度量(包括年)計算兩個日期之間的差異。

0

您計算年齡的函數似乎正常工作。

你可以通過你的$ HTTP請求更換$超時,做一些與此類似:

angular.module('webapp', []) 
 
     .controller('dummyCtrl', ['$scope', '$timeout', function($scope, $timeout) { 
 
      $scope.age = 'NOT DEFINED'; 
 
      
 
      // This simulates the synchronicity of the http request 
 
      $timeout(function() { 
 
       $scope.calculateAge(new Date(2000, 10, 10)); 
 
      }, 1000); 
 
      
 
      $scope.calculateAge = function calculateAge(birthday) { 
 
       console.log(birthday); 
 
       // birthday is a date 
 
       var ageDifMs = Date.now() - birthday.getTime(); 
 
       var ageDate = new Date(ageDifMs); // miliseconds from epoch 
 
       $scope.age = Math.abs(ageDate.getUTCFullYear() - 1970); 
 
      }; 
 
     }]);
<!DOCTYPE html> 
 
    <html ng-app="webapp"> 
 
     <head> 
 
      <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.9/angular.min.js"></script> 
 
     </head> 
 
     <body ng-app="webapp"> 
 
      <div ng-controller="dummyCtrl"> 
 
       <span ng-bind="age"></span> 
 
      </div> 
 
     </body> 
 
    </html>

相關問題