我想将所有用户的年龄显示为网格。我正在从facebook上阅读数据。我没有把它存放在任何地方。
我显示的日期如下:
{{ friend.birthday }}
如何显示年龄而不是显示生日。
如果可以创建过滤器而不是如何创建过滤器以及如何应用它。
答案 0 :(得分:34)
您可以实现一项功能:
控制器:
$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 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
答案 1 :(得分:4)
如果你的价值仅仅是例如&#34; 05/01/2016&#34;。这将是一个将日期转换为生日的有用代码。
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 }}
顺便说一下,我使用这个解决方案将来自jquery datepicker输入的日期转换为age。
答案 2 :(得分:1)
如果您正在使用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")
答案 3 :(得分:0)
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) }}