Javascript Date()按日,月,年计算年龄工作

时间:2022-04-25 01:27:28

I want do show from user date birthday that a few days and months and years last.
Here is my code, as taken from here: Calculate age in JavaScript
How can it continue with the month and day, as:

我希望从用户日期生日那里显示几天,几个月和几年。这是我的代码,从这里开始:用JavaScript计算年龄如何继续月和日,如:

user birthday is : 2010/04/29
The result should be like this: 2 years, 4 months, 5 days old.

用户生日是: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'));

DEMO: http://jsfiddle.net/jFxb5/

3 个解决方案

#1


18  

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'));

DEMO HERE

#2


2  

@Jennifer, or others who don't want to be restricted by format mm/dd/yyyy. All I did was replace

@Jennifer,或者其他不想受格式限制的人mm / dd / yyyy。我做的只是更换

var dob = new Date(dateString.substring(6,10),                   dateString.substring(0,2)-1,                                      dateString.substring(3,5)                                    );

with

var dob = new Date(dateString);

and I could use 2012/09/30 and get the right answer.

我可以使用2012/09/30并得到正确的答案。

#3


0  

Calculates age in terms of years, months and days. Enter the datesin any valid date string format such as '1952/09/28', 'Sep 29, 1952','09/28/1952' etc.

按年,月和日计算年龄。在任何有效日期字符串格式中输入日期,例如'1952/09/28','1952年9月29日','09/28/1952'等。

Takes 2 arguments - date of birth and the date on which to calculateage. You can leave the second argument out for today's date.Returns an object with years, months and days properties of age.

采用2个参数 - 出生日期和计算日期。您可以将第二个参数保留为今天的日期。返回具有年,月和日属性的对象。

Uses the solar year value of 365.2425 days in a year.

使用一年365.2425天的太阳年值。

@param birthDate Date of birth.@param ageAtDate The date on which to calculate the age. None fortoday's date.@returns {{years: number, months: number, days: number}}

@param birthDate出生日期。@ param ageAtDate计算年龄的日期。没有今天的日期。@ return {{years:number,months:number,days:number}}

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};}

#1


18  

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'));

DEMO HERE

#2


2  

@Jennifer, or others who don't want to be restricted by format mm/dd/yyyy. All I did was replace

@Jennifer,或者其他不想受格式限制的人mm / dd / yyyy。我做的只是更换

var dob = new Date(dateString.substring(6,10),                   dateString.substring(0,2)-1,                                      dateString.substring(3,5)                                    );

with

var dob = new Date(dateString);

and I could use 2012/09/30 and get the right answer.

我可以使用2012/09/30并得到正确的答案。

#3


0  

Calculates age in terms of years, months and days. Enter the datesin any valid date string format such as '1952/09/28', 'Sep 29, 1952','09/28/1952' etc.

按年,月和日计算年龄。在任何有效日期字符串格式中输入日期,例如'1952/09/28','1952年9月29日','09/28/1952'等。

Takes 2 arguments - date of birth and the date on which to calculateage. You can leave the second argument out for today's date.Returns an object with years, months and days properties of age.

采用2个参数 - 出生日期和计算日期。您可以将第二个参数保留为今天的日期。返回具有年,月和日属性的对象。

Uses the solar year value of 365.2425 days in a year.

使用一年365.2425天的太阳年值。

@param birthDate Date of birth.@param ageAtDate The date on which to calculate the age. None fortoday's date.@returns {{years: number, months: number, days: number}}

@param birthDate出生日期。@ param ageAtDate计算年龄的日期。没有今天的日期。@ return {{years:number,months:number,days:number}}

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};}