2016-06-24 1 views
-2

У меня есть этот код, чтобы вычислить возраст пользователя:JS Date() возвращает NaN, даже с ToString()

// Get today's date 
var today = new Date(); 
var dd = today . getDate(); 
var mm = today . getMonth() + 1; 
var yyyy = today . getFullYear(); 

if(dd < 10) { 

    dd = '0' + dd; 

} 

if(mm < 10) { 

    mm = '0' + mm; 

} 

/* 
* Calculate the age in days 
*/ 
var minimum_age_in_days = 6574; 

var date_of_birth_formatted = new Date(year + '/' + month + '/' + day); 
today = yyyy + '/' + mm + '/' + dd; 

var difference = today - date_of_birth_formatted; 

var difference_in_days = difference/100/60/60/24/10; 

console . log(difference) . toString(); 
console . log(difference_in_days) . toString(); 

if(difference_in_days < minimum_age_in_days) { 

    $("#formModal") . show(); 
    $("#overlay") . hide(); 
    alert("You're not 18 years old"); 

} 

else { 

    // Hide first modal 
    $("#formModal") . hide(); 

    // Show second modal 
    $("#overlay") . show(); 

} 

В двух console.log() 's возвращение NaN, в то время как я имею попробовал преобразовать их в строки, чтобы я мог выполнить оператор if(). Однако, поскольку эти переменные (difference & difference_in_days) имеют значение NaN, поэтому код не работает. Как я могу преобразовать эти значения, поэтому код не сломается?

+1

Действительно ли вы размещаете пробелы между объектами, '.' и методом? : S В любом случае, я подозреваю, что вы делаете 'var today = new Date(); console.log (сегодня); 'вы увидите нормальный вывод. – pay

+0

Возможно, вы можете использовать момент для выполнения таких операций ... check 'MomentJs': http://momentjs.com/ – Hackerman

+0

Несколько проблем здесь, вы не можете вычесть строки (следовательно,« NaN'). Оба они должны быть 'Date'. Вы также никогда не определяли «год», «месяц» или «день». –

ответ

1

Беда приходит из этих двух линий:

var date_of_birth_formatted = new Date(year + '/' + month + '/' + day); 
today = yyyy + '/' + mm + '/' + dd; 

// examine them: 
typeof date_of_birth_formatted // returns "object" 
typeof today // returns "string" 

Вы собираетесь получить NaN путем вычитания строки из объекта Date. Вместо дополнительной работы, которую вы делаете, чтобы получить сегодняшнюю дату, попробуйте просто использовать новую дату напрямую. Ваш код может затем быть упрощена:

var date_of_birth_formatted = new Date(year + '/' + month + '/' + day); 

var difference = new Date() - date_of_birth_formatted; 

var difference_in_days = difference/100/60/60/24/10; 

console.log(difference).toString(); 
console.log(difference_in_days).toString(); 
1

Проблема находится в строке 25: today = yyyy + '/' + mm + '/' + dd; Вы можете решить вашу проблему, удалив эту строку.

Причина: Вышеупомянутая строка (25) изменяет ваш сегодняшний объект на тип строки. typeof today является string. В то время как typeof date_of_birth_formatted - object. Вычитание объекта из строки возвращает NaN.