将生日转换为angularjs中的年龄

时间:2014-07-22 09:13:21

标签: angularjs angularjs-filter

我想将所有用户的年龄显示为网格。我正在从facebook上阅读数据。我没有把它存放在任何地方。

我显示的日期如下:

{{ friend.birthday }}

如何显示年龄而不是显示生日。

如果可以创建过滤器而不是如何创建过滤器以及如何应用它。

4 个答案:

答案 0 :(得分:34)

您可以实现一项功能:

控制器:

$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);
}

HTML

{{ calculateAge(friend.birthday) }}

或过滤器:

app.filter('ageFilter', function() {
     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);
     }

     return function(birthdate) { 
           return calculateAge(birthdate);
     }; 
});

HTML

{{ friend.birthday | ageFilter }}

年龄算法取自SO answer

[编辑]如果年龄小于1年,并且您想显示月份,则可以修改ageFilter来计算月份差异:

app.filter('ageFilter', function() {
     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);
     }
     function monthDiff(d1, d2) {
       if (d1 < d2){
        var months = d2.getMonth() - d1.getMonth();
        return months <= 0 ? 0 : months;
       }
       return 0;
     }       
     return function(birthdate) { 
           var age = calculateAge(birthdate);
           if (age == 0)
             return monthDiff(birthdate, new Date()) + ' months';
           return age;
     }; 
});

Demo Plunker - Age Function
Demo Plunker - Age Filter
Demo Plunker - Age Filter with Months < 1 year

答案 1 :(得分:4)

如果你的价值仅仅是例如&#34; 05/01/2016&#34;。这将是一个将日期转换为生日的有用代码。

AngularJS

app.filter('ageFilter', function(){
    return function(birthday){
        var birthday = new Date(birthday);
        var today = new Date();
        var age = ((today - birthday) / (31557600000));
        var age = Math.floor( age );
        return age;
    }
});

HTML

{{ relationTypePreDefined.birthdate | ageFilter }}

顺便说一下,我使用这个解决方案将来自jquery datepicker输入的日期转换为age。

答案 2 :(得分:1)

如果您正在使用momentjs。然后,您只需使用此代码段

即可创建过滤器
var now  = "04/09/2013 15:00:00";
var then = "04/09/2013 14:20:30";

moment.utc(moment(now,"DD/MM/YYYY HH:mm:ss").diff(moment(then,"DD/MM/YYYY HH:mm:ss"))).format("HH:mm:ss")

答案 3 :(得分:0)

Idk为什么我永远无法回复人,说我需要更多的代表,但代表我需要评论......无论如何。

对@Dean Christian Armada的回应,我一直收到关于过滤器的错误。但改为以下似乎工作正常,所以我很感激!

$scope.getAge = function(birthday){
    var birthday = new Date(birthday);
    var today = new Date();
    var age = ((today - birthday) / (31557600000));
    var age = Math.floor( age );
    return age;
  }

对于HMTL

{{ getAge(birthdate) }}