我想从用户的生日日期显示做那几日,月和年最后一次。 这里是我的代码,因为从这里取:Calculate age in JavaScript 它如何能够继续的月份和日期,如:
用户生日:2010/04/29 结果应该是这样的:2年,4月,5天之久。
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--;
}
return age;
}
alert(getAge('2010/04/29'));
但是:四联zxsw POI
http://jsfiddle.net/jFxb5/
function getAge(dateString) {
var now = new Date();
var today = new Date(now.getYear(),now.getMonth(),now.getDate());
var yearNow = now.getYear();
var monthNow = now.getMonth();
var dateNow = now.getDate();
var dob = new Date(dateString.substring(6,10),
dateString.substring(0,2)-1,
dateString.substring(3,5)
);
var yearDob = dob.getYear();
var monthDob = dob.getMonth();
var dateDob = dob.getDate();
var age = {};
var ageString = "";
var yearString = "";
var monthString = "";
var dayString = "";
yearAge = yearNow - yearDob;
if (monthNow >= monthDob)
var monthAge = monthNow - monthDob;
else {
yearAge--;
var monthAge = 12 + monthNow -monthDob;
}
if (dateNow >= dateDob)
var dateAge = dateNow - dateDob;
else {
monthAge--;
var dateAge = 31 + dateNow - dateDob;
if (monthAge < 0) {
monthAge = 11;
yearAge--;
}
}
age = {
years: yearAge,
months: monthAge,
days: dateAge
};
if ( age.years > 1 ) yearString = " years";
else yearString = " year";
if ( age.months> 1 ) monthString = " months";
else monthString = " month";
if ( age.days > 1 ) dayString = " days";
else dayString = " day";
if ( (age.years > 0) && (age.months > 0) && (age.days > 0) )
ageString = age.years + yearString + ", " + age.months + monthString + ", and " + age.days + dayString + " old.";
else if ( (age.years == 0) && (age.months == 0) && (age.days > 0) )
ageString = "Only " + age.days + dayString + " old!";
else if ( (age.years > 0) && (age.months == 0) && (age.days == 0) )
ageString = age.years + yearString + " old. Happy Birthday!!";
else if ( (age.years > 0) && (age.months > 0) && (age.days == 0) )
ageString = age.years + yearString + " and " + age.months + monthString + " old.";
else if ( (age.years == 0) && (age.months > 0) && (age.days > 0) )
ageString = age.months + monthString + " and " + age.days + dayString + " old.";
else if ( (age.years > 0) && (age.months == 0) && (age.days > 0) )
ageString = age.years + yearString + " and " + age.days + dayString + " old.";
else if ( (age.years == 0) && (age.months > 0) && (age.days == 0) )
ageString = age.months + monthString + " old.";
else ageString = "Oops! Could not calculate age!";
return ageString;
}
alert(getAge('09/09/1989'));
计算年龄的年,月,日的术语。输入任何有效的日期字符串格式的日期,如“1952年9月28日”,“1952年9月29日”,'09 /1952分之28' 等。
需要两个参数 - 出生日期,并在其上计算年龄的日期。您可以将第二个参数出来今天的日期。返回与年,月,随日龄属性的对象。
使用一年的365.2425天太阳年值。
出生@param生日日期。 @参数ageAtDate上计算年龄的日期。无为今天的日期。 @Returns {{年:数,月数:数,天:数}}
DEMO HERE
尝试这个:
function getAge(birthDate, ageAtDate) {
var daysInMonth = 30.436875; // Days in a month on average.
var dob = new Date(birthDate);
var aad;
if (!ageAtDate) aad = new Date();
else aad = new Date(ageAtDate);
var yearAad = aad.getFullYear();
var yearDob = dob.getFullYear();
var years = yearAad - yearDob; // Get age in years.
dob.setFullYear(yearAad); // Set birthday for this year.
var aadMillis = aad.getTime();
var dobMillis = dob.getTime();
if (aadMillis < dobMillis) {
--years;
dob.setFullYear(yearAad - 1); // Set to previous year's birthday
dobMillis = dob.getTime();
}
var days = (aadMillis - dobMillis) / 86400000;
var monthsDec = days / daysInMonth; // Months with remainder.
var months = Math.floor(monthsDec); // Remove fraction from month.
days = Math.floor(daysInMonth * (monthsDec - months));
return {years: years, months: months, days: days};
}
对于那些不想通过格式function getAge(dateString) {
var today = new Date();
var DOB = new Date(dateString);
var totalMonths = (today.getFullYear() - DOB.getFullYear()) * 12 + today.getMonth() - DOB.getMonth();
totalMonths += today.getDay() < DOB.getDay() ? -1 : 0;
var years = today.getFullYear() - DOB.getFullYear();
if (DOB.getMonth() > today.getMonth())
years = years - 1;
else if (DOB.getMonth() === today.getMonth())
if (DOB.getDate() > today.getDate())
years = years - 1;
var days;
var months;
if (DOB.getDate() > today.getDate()) {
months = (totalMonths % 12);
if (months == 0)
months = 11;
var x = today.getMonth();
switch (x) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: {
var a = DOB.getDate() - today.getDate();
days = 31 - a;
break;
}
default: {
var a = DOB.getDate() - today.getDate();
days = 30 - a;
break;
}
}
}
else {
days = today.getDate() - DOB.getDate();
if (DOB.getMonth() === today.getMonth())
months = (totalMonths % 12);
else
months = (totalMonths % 12) + 1;
}
var age = years + ' years ' + months + ' months ' + days + ' days';
return age;
}
console.log(getAge("2010/02/28"));
console.log(getAge("2010/03/01"));
限制谁,你可以更换:
mm/dd/yyyy
有:
var dob = new Date(dateString.substring(6,10),
dateString.substring(0,2)-1,
dateString.substring(3,5)
);
这让我用用2012/09/30,仍然可以得到正确的答案。
var dob = new Date(dateString);
当我看到了接受的解决方案的问题(见我的评论那里),我在这里提出我自己的版本,保证会有仅为1增加的出生日期时的天数没有“跳跃”。
此代码定义表示两个日期之间的差异更为通用 function CalculateAge(DobString) {
$("#age").val(getAge(DobString));
}
function getAge(dateString) {
var now = new Date('2019/01/20');
var today = new Date(now.getYear(), now.getMonth(), now.getDate());
var yearNow = now.getYear();
var monthNow = now.getMonth();
var dateNow = now.getDate();
var dob = new Date(dateString.substring(6, 10),
dateString.substring(3, 5) - 1,
dateString.substring(0, 2)
);
var yearDob = dob.getYear();
var monthDob = dob.getMonth();
var dateDob = dob.getDate();
var age = {};
var ageString = "";
var yearString = "";
var monthString = "";
var dayString = "";
yearAge = yearNow - yearDob;
if (monthNow >= monthDob)
var monthAge = monthNow - monthDob;
else {
yearAge--;
var monthAge = 12 + monthNow - monthDob;
}
if (dateNow >= dateDob)
var dateAge = dateNow - dateDob;
else {
monthAge--;
var dateAge = 31 + dateNow - dateDob;
if (monthAge < 0) {
monthAge = 11;
yearAge--;
}
}
age = {
years: yearAge,
months: monthAge,
days: dateAge
};
if (age.years > 1) yearString = " years";
else yearString = " year";
if (age.months > 1) monthString = " months";
else monthString = " month";
if (age.days > 1) dayString = " days";
else dayString = " day";
if ((age.years > 0) && (age.months > 0) && (age.days > 0))
ageString = age.years + yearString + ", " + age.months + monthString + " " + age.days + dayString + " ";
else if ((age.years == 0) && (age.months == 0) && (age.days > 0))
ageString = " " + age.days + dayString + " ";
else if ((age.years > 0) && (age.months == 0) && (age.days == 0))
ageString = age.years + yearString + " ";
else if ((age.years > 0) && (age.months > 0) && (age.days == 0))
ageString = age.years + yearString + " " + age.months + monthString + " ";
else if ((age.years == 0) && (age.months > 0) && (age.days > 0))
ageString = age.months + monthString + " " + age.days + dayString + " ";
else if ((age.years > 0) && (age.months == 0) && (age.days > 0))
ageString = age.years + yearString + " " + age.days + dayString + " ";
else if ((age.years == 0) && (age.months > 0) && (age.days == 0))
ageString = age.months + monthString + " ";
else ageString = "Oops! Could not calculate age!";
return ageString;
}
类。功能DateInterval
然后成为基于该类薄的实现。
getAge