生日显示为前一年的年龄?

时间:2015-06-08 17:04:18

标签: javascript

我正在为我想要使用它的网站测试JavaScript代码段。基本上,当页面加载我的年龄执行的功能时。我是在一个固定的出生日期做这件事的。我在使用birthDate变量时发现了一个错误(不确定它究竟发生的原因)。我的错误发生在birthDate月份比当前月份少一个时,并且当天至少比当前日期的当天更早一天(例如:今天6月8日的日期,从5月9日开始的任何事情)到6月8日产生错误)

对于该片段,我输入了出生日期5-9-1989。现在当你或我做数学时,我们都知道基于今天的日期6-8-2015。年龄应为26.但由于某种原因,代码会吐出数字25,如下所示。

(注意:只要月份的birthDate变量输入比当前月份小1,并且当天至少比当前日期大一,错误将发生在一年并不重要。如果日期不重要等于或早于当月 - 1和日+ n(n> 0)以显示错误未发生的日期)

任何有助于弄清楚为什么会出现这种错误的帮助都会非常有用。



function myage() {
var birthDate = new Date(1989, 5, 9, 0, 0, 0, 0)

// The current date
var currentDate = new Date();

// The age in years
var age = currentDate.getFullYear() - birthDate.getFullYear();

// Compare the months
var month = currentDate.getMonth() - birthDate.getMonth();

// Compare the days
var day = currentDate.getDate() - birthDate.getDate();

// If the date has already happened this year
if ( month < 0 || month == 0 && day < 0 || month < 0 && day < 0 )
{
    age--;
}

document.write('I am ' + age + ' years old.');
}
&#13;
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>
<body onLoad="myage()">
</body>
</html>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:6)

很简单,Date函数的月份应在0(1月)到11(12月)的范围内给出。只需将5改为4即可指定五月。

引用MDN

  

<强>月
  表示月份的整数值,从1月的0开始到12月的11。

&#13;
&#13;
function myage() {
var birthDate = new Date(1989, 4, 9, 0, 0, 0, 0)

// The current date
var currentDate = new Date();

// The age in years
var age = currentDate.getFullYear() - birthDate.getFullYear();

// Compare the months
var month = currentDate.getMonth() - birthDate.getMonth();

// Compare the days
var day = currentDate.getDate() - birthDate.getDate();

// If the date has already happened this year
if ( month < 0 || month == 0 && day < 0 || month < 0 && day < 0 )
{
    age--;
}

document.write('I am ' + age + ' years old.');
}
&#13;
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>
<body onLoad="myage()">
</body>
</html>
&#13;
&#13;
&#13;