javascript日期()按天,月,年计算老龄工作

问题描述 投票:6回答:6

我想从用户的生日日期显示做那几日,月和年最后一次。 这里是我的代码,因为从这里取: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

javascript jquery
6个回答
19
投票
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'));


1
投票

计算年龄的年,月,日的术语。输入任何有效的日期字符串格式的日期,如“1952年9月28日”,“1952年9月29日”,'09 /1952分之28' 等。

需要两个参数 - 出生日期,并在其上计算年龄的日期。您可以将第二个参数出来今天的日期。返回与年,月,随日龄属性的对象。

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

出生@param生日日期。 @参数ageAtDate上计算年龄的日期。无为今天的日期。 @Returns {{年:数,月数:数,天:数}}

DEMO HERE

1
投票

尝试这个:

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
投票

对于那些不想通过格式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,仍然可以得到正确的答案。


0
投票
var dob = new Date(dateString);

0
投票

当我看到了接受的解决方案的问题(见我的评论那里),我在这里提出我自己的版本,保证会有仅为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
© www.soinside.com 2019 - 2024. All rights reserved.