web-dev-qa-db-fra.com

Conversion anniversaire en âge en angularjs

Je veux afficher l'âge de tous mes utilisateurs au réseau. Je lis les données de facebook. Je ne les stocke pas ailleurs.

je montre la date comme:

{{ friend.birthday }}

Comment puis-je afficher l'âge au lieu d'afficher anniversaire.

s'il est possible de créer des filtres, comment créer un filtre et comment l'appliquer.

10
Hitesh Modha

Vous pouvez implémenter une fonction:

Manette:

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

Ou un filtre:

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

Algorithme d'âge tiré de cette SO answer .

[EDIT] Si l'âge est inférieur à 1 an et que vous souhaitez afficher les mois, vous pouvez modifier le filtre ageFilter pour calculer la différence de mois:

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

Démo Plunker - Age Function
Demo Plunker - Age Filter
Demo Plunker - Filtre d’âge avec mois <1 an

34
pixelbits

Si vous en avez pour votre argent, c'est par exemple "05/01/2016". Ce sera un code utile pour convertir la date en anniversaire.

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

En passant, j’ai utilisé cette solution pour convertir une date provenant d’une entrée jquery datepicker en âge.

Si vous utilisez momentjs. Ensuite, vous pouvez créer un filtre simplement en utilisant cet extrait

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, pourquoi je ne peux jamais répondre aux gens, dit que j'ai besoin de plus de représentants, mais pour pouvoir repondre, je dois commenter .. peu importe. 

En réponse à @Dean Christian Armada, je continuais à avoir une erreur concernant le filtre. Mais passer à ce qui suit semble bien fonctionner, donc je l’apprécie!

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

Et pour le HMTL

{{ getAge(birthdate) }}
0
Chris Weems