2015-06-08 2 views
4

Я тестирую фрагмент JavaScript для сайта, в котором я хочу его использовать. В основном, когда страница загружает функцию, выполняемую моим возрастом. Я делаю это с установленной даты рождения. Я заметил ошибку при игре с переменной birthDate (точно не знаю, почему это происходит). Моя ошибка происходит, когда месяц рождения месяца меньше, чем в текущем месяце, и день по крайней мере на один больше, чем текущий день, вплоть до текущей даты (Пример: сегодняшняя дата 8 июня, что-то с 9 мая по 8 июня) ошибка)День рождения, показанный как возраст предыдущего года?

Для фрагмента я вступил в дату рождения 5-9-1989. Теперь, когда вы или я делаем математику, мы оба знаем, что на основе сегодняшней даты 6-8-2015. Возраст должен быть 26. Но по какой-то причине код выплескивает номер 25, как показано ниже.

(Примечание: до тех пор, пока переменная ввода birthDate месяца не будет меньше текущего месяца, а день будет по крайней мере на один больше, чем текущий день, ошибка будет проходить год не имеет значения. позже или раньше, чем месяц - 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.'); 
 
}
<!doctype html> 
 
<html> 
 
<head> 
 
<meta charset="utf-8"> 
 
<title>Untitled Document</title> 
 
</head> 
 
<body onLoad="myage()"> 
 
</body> 
 
</html>

ответ

6

Довольно просто, месяц для функции Date призвана быть дано в диапазоне от 0 (январь) до 11 (декабрь). Просто измените 5 на 4, чтобы указать май.

Цитирую MDN:

месяц
значение Integer, представляющее месяц, начиная с 0 за январь 11 за декабрь.

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.'); 
 
}
<!doctype html> 
 
<html> 
 
<head> 
 
<meta charset="utf-8"> 
 
<title>Untitled Document</title> 
 
</head> 
 
<body onLoad="myage()"> 
 
</body> 
 
</html>

+1

Спасибо за это объяснение. Думаю, мой мозг не думал о том, что его сначала можно рассматривать как массив. Но теперь это имеет смысл – Nalani

Смежные вопросы