用angularjs将生日转换为年龄

用angularjs将生日转换为年龄,angularjs,angularjs-filter,Angularjs,Angularjs Filter,我想向网格显示所有用户的年龄。我正在从facebook上读取数据。我不会将数据存储在任何地方 我显示的日期如下: {{ friend.birthday }} 如何显示年龄而不是生日 如果可以创建筛选器,请参阅如何创建筛选器以及如何应用筛选器。您可以实现以下功能: 控制器: $scope.calculateAge = function calculateAge(birthday) { // birthday is a date var ageDifMs = Date.now() - bi

我想向网格显示所有用户的年龄。我正在从facebook上读取数据。我不会将数据存储在任何地方

我显示的日期如下:

{{ friend.birthday }}
如何显示年龄而不是生日


如果可以创建筛选器,请参阅如何创建筛选器以及如何应用筛选器。

您可以实现以下功能:

控制器:

$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

或过滤器:

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

年龄算法取自此

[编辑]如果年龄小于1岁,并且您希望显示月份,您可以修改年龄筛选器以计算月份差异:

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;
     }; 
});
app.filter('ageFilter',function(){
函数calculateAge(生日){//生日是一个日期
var ageDifMs=Date.now()-birth.getTime();
var ageDate=新日期(ageDifMs);//距离历元的毫秒
返回Math.abs(ageDate.getUTCFullYear()-1970);
}
函数monthDiff(d1、d2){
如果(d1return months如果您使用的是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")

如果您的值仅为例如“05/01/2016”。这将是将日期转换为生日的有用代码

安格拉斯

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


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

Idk为什么我永远不能回复别人,说我需要更多的代表,但要代表我需要评论..随便什么

在回复@Dean Christian Armada's时,我不断收到有关过滤器的错误。但改为以下内容似乎效果不错,因此我非常感谢

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

这很好。感谢此解决方案。但是,如果婴儿的年龄小于1岁,而不是将年龄显示为“0”,我如何修改此值,使其以月份显示,如
6个月
表示年龄?更新答案以包括婴儿月数<1年此解决方案在某些情况下不起作用。它在2015年1月1日的26.01输出0岁作为生日.2016(日、月、年)。它确实有效…月从索引0开始。那么,0月是1月,1月是2月。您是否错误地认为1是1月?为什么
geDate.getUTCFullYear()-1970
{{ relationTypePreDefined.birthdate | ageFilter }}
$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;
  }
{{ getAge(birthdate) }}