角度:根据出生日期计算年龄

时间:2017-02-14 19:57:31

标签: angularjs

我正在尝试根据出生日期计算年龄,但出于某种原因,它正常运作。

这是角度代码:

数据来自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) }}

请告知。

2 个答案:

答案 0 :(得分:1)

ageDifMs是差异的毫秒数,因此您可以根据一年中的毫秒数轻松计算差异:

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

此外,如果您使用的是02-01-1990格式,则无法将此内容提交给new Date。相反,我建议使用JavaScript的moment库,它也可以轻松地从提供的格式创建日期,并使用任何指标(包括年)计算两个日期之间的差异。

答案 1 :(得分:0)

您计算年龄的功能似乎正常。

您可以用$ http请求替换$ timeout,并执行与此类似的操作:

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>