すべてのユーザーの年齢をグリッドに表示したい。 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
{{ 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;
};
});
あなたが価値があるなら、例えば「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")
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) }}