有2个javascript日期,
首先是生日 第二个是从该日期开始计算年龄的日期。
这应该是最好的方法。
答案 0 :(得分:28)
function calculateAge (birthDate, otherDate) {
birthDate = new Date(birthDate);
otherDate = new Date(otherDate);
var years = (otherDate.getFullYear() - birthDate.getFullYear());
if (otherDate.getMonth() < birthDate.getMonth() ||
otherDate.getMonth() == birthDate.getMonth() && otherDate.getDate() < birthDate.getDate()) {
years--;
}
return years;
}
示例:
var age = calculateAge("02/24/1991", "02/24/2010"); // Format: MM/DD/YYYY
答案 1 :(得分:13)
这是一种方式:
function getAge(d1, d2){
d2 = d2 || new Date();
var diff = d2.getTime() - d1.getTime();
return Math.floor(diff / (1000 * 60 * 60 * 24 * 365.25));
}
console.log( getAge(new Date(1978, 10, 3)) );
小心月份。 Javascript从0开始计算。
1978, 10, 3
表示1978年11月3日
答案 2 :(得分:5)
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;
}
// A bit of jQuery to call the getAge() function and update the page...
$(document).ready(function() {
$("#submitDate").click(function(e) {
e.preventDefault();
$("#age").html(getAge($("input#date").val()));
});
});
and HTML IS
日期(MM / DD / YYYY):计算年龄
年龄:7岁,1个月和15天。
答案 3 :(得分:2)
使用getTime()将日期转换为自纪元以来的毫秒数,然后减去这些值并将结果转换回年份:
const MS_PER_YEAR = 1000 * 60 * 60 * 24 * 365.2425;
var years = Math.floor((dateNow.getTime() - dateThen.getTime()) / MS_PER_YEARS);
答案 4 :(得分:1)
最好的方法可能是将日期转换为时间戳,如果日期是字符串,则可能使用parse()
。然后简单地使用new Date(milliseconds)
对于1970年1月1日之前的日期,这可能不太准确,所以另外减去天,月等等的替代方法会更合适。
答案 5 :(得分:1)
var birth = new Date('07/11/2003');
var check = new Date();
var milliDay = 1000 * 60 * 60 * 24; // a day in milliseconds;
var ageInDays = (check - birth) / milliDay;
var ageInYears = Math.floor(ageInDays / 365 );
答案 6 :(得分:1)
如果您在一个庞大的Javascript项目中,您可能[使用|需要使用]框架......
使用Mootools More,您有一个Date Type diff method和timeDiff method,可以满足您的需求。
答案 7 :(得分:1)
一种简单的方法是使用moment.js。
我们有两个日期,一个是出生日期(birthDate),另一个是用来从(specificDate)计算年龄的日期。您可以避免使用此参数并获取当前年龄。
moment(specificDate).diff(moment(birthDate), 'years');
希望对您有帮助!
答案 8 :(得分:0)
我修改了Mic的回复以允许今天成为用户的生日。不同之处在于您检查年龄的日期应设置为当天的午夜和/或当前日期应设置为23:59:59。一个例子是看今天用户是18,这将返回18。
function getAge(d1){
var now = new Date();
var d2 = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 23, 59, 59);
var diff = d2.getTime() - d1.getTime();
return Math.floor(diff / (1000 * 60 * 60 * 24 * 365.25));
}
console.log(getAge(new Date(1992, 10, 17, 0, 0, 0)));
答案 9 :(得分:0)
function getAge(dateOfBirth, tillDate) {
var dob = new Date(dateOfBirth);
var endDt = new Date(tillDate) || new Date();
return new Date(endDt.getTime() - dob.getTime()).getUTCFullYear() - 1970;
}
示例: console.log(getAge('1/1/2000', '1/1/2016')); // Format: MM/DD/YYYY
答案 10 :(得分:0)
按当年计算年龄
calculateExp(birthDate) {
birthDate = new Date(birthDate);
var now = new Date();
otherDate = new Date(now.getFullYear(),now.getMonth(),now.getDate());
var years = (otherDate.getFullYear() - birthDate.getFullYear() );
if (otherDate.getMonth() < birthDate.getMonth() || otherDate.getMonth() == birthDate.getMonth() && otherDate.getDate() < birthDate.getDate()) {
years--;
}
return years;
}
答案 11 :(得分:0)
这里是使用 moment.js 库的一个例子,这在当今很普遍。只需将此答案添加到其他许多答案中即可。
var banner = $("#banner-message")
var button = $("button")
// handle click and add class
button.on("click", function(){
var inputValue = $("#txtInput").val();
var age = parseInt(moment().diff(inputValue,'years',true));
$("#spantext").html(age + ' years.');
})
body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}
#banner-message {
background: #fff;
border-radius: 4px;
padding: 20px;
text-align: center;
transition: all 0.2s;
margin: 0 auto;
width: 300px;
}
button {
background: #0084ff;
border: none;
border-radius: 5px;
padding: 8px 14px;
font-size: 15px;
color: #fff;
}
#banner-message.alt {
background: #0084ff;
color: #fff;
margin-top: 40px;
width: 200px;
}
#banner-message.alt button {
background: #fff;
color: #000;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="banner-message">
<p>Enter Date: <input type='text' id='txtInput' value='1981-12-25' /></p>
<label>Age is : </label><span id='spantext'></span> <br/>
<p><button>Calculate Age</button></p>
</div>
答案 12 :(得分:0)
此句柄还适用于leap年:
const getAgeFromBirthDate = (year, month, day) => {
const date = new Date();
date.setFullYear(date.getFullYear() - year);
date.setMonth(date.getMonth() - month);
//date.setDate(date.getDate() - day);
return date;
};
console.log( getAgeFromBirthDate(1994, 07, 19).getFullYear() );