function getAge(dateString) {
var today = new Date();
var birthDate = new Date(dateString);
var age = today.getFullYear() - birthDate.getFullYear();
var m = today.getMonth() - birthDate.getMonth();
if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
document.write(age);
}
getAge("01/20/2011")
这显示我0年,但我希望显示10 Months
和9个月,直到他的生日来临10/20/2011
。
答案 0 :(得分:11)
通常情况下,您想知道一个人在特定日期的年龄, 或两个日期之间的年,月和日。
如果您确实想要今天的年龄,请传递一个日期或日期字符串参数。
function getAge(fromdate, todate){
if(todate) todate= new Date(todate);
else todate= new Date();
var age= [], fromdate= new Date(fromdate),
y= [todate.getFullYear(), fromdate.getFullYear()],
ydiff= y[0]-y[1],
m= [todate.getMonth(), fromdate.getMonth()],
mdiff= m[0]-m[1],
d= [todate.getDate(), fromdate.getDate()],
ddiff= d[0]-d[1];
if(mdiff < 0 || (mdiff=== 0 && ddiff<0))--ydiff;
if(mdiff<0) mdiff+= 12;
if(ddiff<0){
fromdate.setMonth(m[1]+1, 0);
ddiff= fromdate.getDate()-d[1]+d[0];
--mdiff;
}
if(ydiff> 0) age.push(ydiff+ ' year'+(ydiff> 1? 's ':' '));
if(mdiff> 0) age.push(mdiff+ ' month'+(mdiff> 1? 's':''));
if(ddiff> 0) age.push(ddiff+ ' day'+(ddiff> 1? 's':''));
if(age.length>1) age.splice(age.length-1,0,' and ');
return age.join('');
}
getAge("1/25/1974")>> 37 years 8 months and 26 days
getAge("9/15/1984")>> 27 years 1 month and 5 days
getAge("12/20/1984","10,20,2011")>>26 years and 9 months
getAge(new Date(),"12/25/2011")+' till Christmas'>>
2 months and 5 days till Christmas
getAge("6/25/2011")>> 3 months and 25 days
答案 1 :(得分:4)
通过这个,你可以有一个描述性的年龄文本:天,月和年:
function getAge(dateString) {
var birthdate = new Date(dateString).getTime();
var now = new Date().getTime();
// now find the difference between now and the birthdate
var n = (now - birthdate)/1000;
if (n < 604800) { // less than a week
var day_n = Math.floor(n/86400);
return day_n + ' day' + (day_n > 1 ? 's' : '');
} else if (n < 2629743) { // less than a month
var week_n = Math.floor(n/604800);
return week_n + ' week' + (week_n > 1 ? 's' : '');
} else if (n < 63113852) { // less than 24 months
var month_n = Math.floor(n/2629743);
return month_n + ' month' + (month_n > 1 ? 's' : '');
} else {
var year_n = Math.floor(n/31556926);
return year_n + ' year' + (year_n > 1 ? 's' : '');
}
}
var age = getAge("01/20/2011");
alert(age);