2015-12-29 3 views
-2

Я сделал эту функцию javascript для вычисления некоторых дат после ввода даты. Это сценарий:Nan Undefined Nan Error (Firefox, Edge and Safari)

processDateInput: function() { 
    if(!this.dayInputVal || !this.monthInputVal || !this.yearInputVal || (this.$.dayInputCon.invalid || this.$.monthInputCon.invalid || this.$.yearInputCon.invalid)) { 
    this.$.dateInputErrToast.show(); 
    return; 
} 
    var monthNames = ["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"]; 
    var date = new Date(this.yearInputVal + "-" + parseInt(this.monthInputVal) + "-" + parseInt(this.dayInputVal)).getTime(); 
    var date1 = new Date(date - 24*60*60*1000*280); 
    var date2 = new Date(date - 24*60*60*1000*224); 
    var date3 = new Date(date - 24*60*60*1000*175); 
    var date4 = new Date(date - 24*60*60*1000*105); 
    var date5 = new Date(date - 24*60*60*1000*56); 
    var date6 = new Date(date - 24*60*60*1000*140); 
    this.date1 = date1.getDate() + " " + monthNames[date1.getMonth() ]+ " " + date1.getFullYear(); 
    this.date2 = date2.getDate() + " " + monthNames[date2.getMonth() ]+ " " + date2.getFullYear(); 
    this.date3 = date3.getDate() + " " + monthNames[date3.getMonth() ]+ " " + date3.getFullYear(); 
    this.date4 = date4.getDate() + " " + monthNames[date4.getMonth() ]+ " " + date4.getFullYear(); 
    this.date5 = date5.getDate() + " " + monthNames[date5.getMonth() ]+ " " + date5.getFullYear(); 
    this.date6 = date6.getDate() + " " + monthNames[date6.getMonth() ]+ " " + date6.getFullYear(); 
    this.$.dateResult.opened = true; 
} 

Расчетные даты показаны в html прогибах. Скрипт отлично работает в Chrome, но когда я использую скрипт в Firefox, Safari или Edge он вернется: NaN Undefined NaN. Я не могу найти причину этого.

+0

Процитировать скриншот консоли –

+1

Каковы значения 'this.yearInputVal',' this.monthInputVal' и 'this.dayInputVal'? –

ответ

2

Это произойдет, если у вас установлен неверный формат даты.

Я замечаю, что вы используете parseInt для ввода вашего месяца и даты, что означает, что вы получите результаты, такие как 2016-2-6, что не является допустимым форматом, как признано new Date. Вместо этого вам нужно будет убедиться, что вы заполняете свои номера до 2016-02-06, и это должно работать нормально.

В качестве альтернативы, попробуйте:

var date = new Date(this.yearInputVal, this.monthInputVal-1, this.dayInputVal).getTime(); 

Это должно занять год-месяц-день комбо и дать вам правильный результат.

+1

Kudos (например, +1) для альтернативы, нет необходимости проходить через строку для этого (и по многим причинам не нужно). –

+0

Спасибо! Альтернатива работала для меня! – Anonymous