2014-07-22 11 views
7

मैं अपने सभी उपयोगकर्ताओं की आयु ग्रिड में प्रदर्शित करना चाहता हूं। मैं फेसबुक से डेटा पढ़ रहा हूं। मैं इसे कहीं भी स्टोर नहीं कर रहा हूं।एंजुलरजेज़ में जन्मदिन से उम्र

मैं प्रदर्शित कर रहा हूँ तारीख की तरह:

{{ friend.birthday }} 

कैसे मैं बजाय जन्मदिन प्रदर्शित करने में उम्र प्रदर्शित कर सकते हैं।

यदि फिल्टर बनाने और इसे कैसे लागू किया जाए, तो फिल्टर बनाने के लिए फ़िल्टर बनाना संभव है।

उत्तर

28

आप एक समारोह को लागू कर सकते हैं:

नियंत्रक:

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

एचटीएमएल

+०१२३५१६४१०६१
{{ 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

+0

धन्यवाद के लिए, सही काम करता है। – user1937021

+0

यह अच्छी तरह से काम करता है।इस समाधान के लिए धन्यवाद। हालांकि, ऐसे मामलों में जहां एक बच्चे की आयु 1 वर्ष से कम है, उम्र को '0' के रूप में दिखाने की बजाय, मैं इसे कैसे संशोधित कर सकता हूं ताकि यह उम्र के लिए '6 महीने 'जैसे महीनों में दिखाया जा सके? – Neel

+0

बच्चे के महीनों को शामिल करने के लिए अद्यतन उत्तर <1 वर्ष – pixelbits

1

यदि आप पल्पज का उपयोग कर रहे हैं। तो फिर तुम बस इस स्निपेट

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") 
2

का उपयोग कर आप कर रहे हैं मूल्य सिर्फ उदाहरण के लिए "2016/05/01" है द्वारा फिल्टर बना सकते हैं। तिथि को जन्मदिन में बदलने के लिए यह एक उपयोगी कोड होगा।

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

एचटीएमएल

{{ relationTypePreDefined.birthdate | ageFilter }} 

तरह से मैं इस समाधान का इस्तेमाल किया एक तिथि उम्र के लिए एक jQuery datepicker इनपुट से आ रही कन्वर्ट करने के द्वारा।

0

आईडीक क्यों मैं लोगों को कभी जवाब नहीं दे सकता, कहता है कि मुझे अधिक प्रतिनिधि की आवश्यकता है लेकिन प्रतिनिधि के लिए मुझे टिप्पणी करने की आवश्यकता है .. जो भी हो।

@ डीन क्रिश्चियन आर्मडा के जवाब में, मुझे फ़िल्टर के बारे में एक त्रुटि मिली। लेकिन निम्नलिखित में बदलना ठीक काम करता है इसलिए मैं इसकी सराहना करता हूं!

$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) }} 
संबंधित मुद्दे