我想在网格中显示所有用户的年龄。我正在从Facebook读取数据,没有将其存储在任何地方。
我显示的日期格式如下:
{{ friend.birthday }}
如何显示年龄而不是生日。
如果可以创建筛选器,则如何创建筛选器以及如何应用它。
我想在网格中显示所有用户的年龄。我正在从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;
};
});
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 }}
顺便说一下,我使用了这个解决方案将来自jquery日期选择器输入的日期转换为年龄。
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")
我不知道为什么我无法回复别人,显示我需要更多的声望,但是要获得声望,我需要发表评论...无论如何。
针对@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;
}
{{ getAge(birthdate) }}