2013-09-24 6 views
1

Я столкнулся с проблемой при показе даты в IE, ниже моя структура JSON. Я пытаюсь отображать даты inStoreDate и firstMarkDownDate в пользовательском интерфейсе. Он отлично работает в FF и Chrome, но я сталкиваюсь с проблемами при приходе в IE. В IE он отображается как NaN.Дата JavaScript NaN в IE?

"data":[ 
    { 
    "Id": "123", 
    "inDate": [ 
     2012, 
     12, 
     17 
    ] 
    } 
] 

Я использую следующую функцию формата даты для форматирования даты перед отображением.

formatDate: function(longDate) { 
    var d = new Date(longDate); 
    return ('0' + (d.getMonth()+1)).slice(-2) + '/' 
      + ('0' + (d.getDate())).slice(-2) + '/' 
      + d.getFullYear(); 
} 

formatDate(data.inDate); 
+0

С каким IE версии у вас возникли проблемы? – Teemu

+1

@Teemu: все версии IE от IE7 до IE10 – Gary

ответ

0

можно передать массив в Date конструктор, который причина ваших проблем. Массивы (как и все объекты) будут стрифицированы и затем разбираются как строка при подаче в конструктор Date, но IE не распознает формат "2012,12,17" как действительную дату, пока Chrome делает.

Вместо этого, вы должны пройти три отдельных значений отдельно:

var date = new Date(longValue[0], longValue[1], longValue[2]); 
+1

Было бы проще просто 'formatDateWithZero (data.inStoreDate.join ('/'));'? – Teemu

+0

@Teemu: Хорошая идея, это должно сработать. Он не должен даже страдать от проблем с часовым поясом, но мне не нравится преобразовывать строку в строку и анализировать номера, когда они уже доступны. – Bergi

+0

@Teemu: Спасибо Teemu, который работает для меня – Gary

0

Согласно MSDN Date specification, нет нормализуется способ передать объект в качестве параметра функции Date().

Вы, скорее всего, потребуется изменить код, чтобы пройти год, месяц и день функции следующим образом:

self.inStoreDate = formatDateWithZero(data.inStoreDate[0], data.inStoreDate[1], data.inStoreDate[2]); 

... или обновить функциональные возможности принять массив, но извлечь эти значения из него для Дата конструктор:

formatDateWithZero: function(longValue) { 
    var date = new Date(longValue[0], longValue[1], longValue[2]); 
    return ('0' + (date.getMonth()+1)).slice(-2) + '/' 
      + ('0' + (date.getDate())).slice(-2) + '/' 
      + date.getFullYear(); 
} 

self.inStoreDate = formatDateWithZero(data.inStoreDate); 

Рабочая JSFiddle: http://jsfiddle.net/pt75S/2/

+0

Это я попробовал, но в некоторых случаях мне может понадобиться использовать ту же функцию formatDateWithZero, чтобы отформатировать longValue. Поэтому я использовал новую дату для преобразования даты в функцию formatDateWithZero. – Gary

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