2013-09-05 3 views
4

У меня есть функция, которая преобразует дату в ГГГГ-ММ-ДД от DD/MM/YYYY.Ошибка сравнения дат JavaScript в IE8

Это работает во всех браузерах, кроме IE8, по какой-то причине при создании нового объекта Date он возвращает NaN.

Базовая реализация кода http://jsfiddle.net/bX83c/1/

var compareDate = function(value){ 
    var dateFragements = value.split('/'); 
    if (dateFragements.length == 3) { 
     var currentDate = new Date(); 
      currentDate.setHours(0, 0, 0, 0); 

     var startDate = new Date(dateFragements[2] + '-' + dateFragements[1] + '-' + dateFragements[0]); 

     if (startDate >= currentDate) { 
      return true; 
     } else { 
      return false; 
     } 
    } 
} 
alert(compareDate('17/09/2013')); 
+0

Я думаю, что у вас есть свой ответ в одном из следующих способов: Http: // StackOverflow. com/questions/2182246/javascript-date-in-ie-nan-firefox-chrome-ok или: http://stackoverflow.com/questions/11020658/javascript-json-date-parse-in-ie7-ie8- return-nan Простой googling ... –

ответ

3

Intialise вашей даты, как это. Он будет работать во всех браузерах

var startDate = new Date(dateFragements[2] , dateFragements[1] , dateFragements[0]); 

Есть 4 способа, в которых Date объект может быть intialised с помощью конструктора

new Date() // current date and time 
new Date(milliseconds) //milliseconds since 1970/01/01 
new Date(dateString) 
new Date(year, month, day, hours, minutes, seconds, milliseconds) 

Строки в Date объекте не означает, что она будет принимать все строки даты. Если вы хотите дать строку в качестве ввода, дайте это. (dateFragements [2] + '/' + dateFragements [1] + '/' + dateFragements [0]) ;. (/ как разделитель). Он будет поддерживаться во всех браузерах.

+0

Это похоже на исправление. Вы знаете, почему IE8 терпит неудачу, когда объект Date инициализируется строкой? – CharliePrynn

+1

Принимая строку, это не значит, что она примет все строки. Если вы хотите дать строку в качестве ввода, дайте это. (dateFragements [2] + '/' + dateFragements [1] + '/' + dateFragements [0]) ;. Он будет поддерживаться во всех браузерах – 999k

+0

Спасибо, отметьте это как принято. – CharliePrynn

2

IE8 ожидает '/' как разделитель в строке даты, поэтому ваша функция не работает. Это может быть упрощена:

var compareDate = function(value){ 
var dateFragements = value.split('/'); 
if (dateFragements.length == 3) { 
    var currentDate = function(){ return (this.setHours(0), 
             this.setMinutes(0), 
             this.setSeconds(0), 
             this); }.call(new Date) 
    ,startDate = new Date([dateFragements[2], 
          dateFragements[1], 
          dateFragements[0]].join('/')); 
    return startDate>=currentDate; 
} 
} 
1
new Date(dateString) 

принимает следующие форматы (только):

"October 13, 1975 11:13:00" 
"October 13, 1975 11:13" 
"October 13, 1975" 
Смежные вопросы