web-dev-qa-db-ja.com

誕生日をangularjsで年齢に変換する

すべてのユーザーの年齢をグリッドに表示したい。 Facebookからデータを読んでいます。どこにも保存していません。

私は次のような日付を表示しています:

{{ friend.birthday }}

誕生日を表示する代わりに年齢を表示するにはどうすればよいですか。

フィルタの作成方法と適用方法よりもフィルタを作成できるかどうか。

10
Hitesh Modha

次の関数を実装できます。

コントローラ:

$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回答

[編集]年齢が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;
     }; 
});

デモプランカー-年齢関数
デモプランカー-年齢フィルター
デモプランカー-月が1年未満の年齢フィルター

34
pixelbits

あなたが価値があるなら、例えば「2016年5月1日」です。これは、日付を誕生日に変換するための便利なコードになります。

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

ちなみに、私はこのソリューションを使用して、jquerydatepicker入力からの日付を年齢に変換しました。

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")
1
james hawkings

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) }}
0
Chris Weems