javascript date.parse разница в Chrome и других браузерах - PullRequest
16 голосов
/ 25 ноября 2011

У меня есть строка даты "2011-11-24T09: 00: 27 + 0000", полученная из API graph.facebook.

Когда я бегу

var timestamp = Date.parse(facebookDate);

в хром. Я получаю метку времени, которая относится к дате! отлично! * * 1006

Но в КАЖДОМ крупном браузере ... Я получаю "NaN" !!!

Конечно, все эти браузеры используют одну и ту же функцию разбора javascript, верно?

Кто-нибудь может объяснить, почему одна и та же функция javascript дает разные результаты?

И кто-нибудь может сказать мне, как решить эту проблему ...

Заранее спасибо

Alex

1 Ответ

10 голосов
/ 25 ноября 2011

Вот исправление для Firefox и IE / Safari (с помощью JavaScript: какие браузеры поддерживают анализ строки даты ISO-8601 с Date.parse ):

DEMO

var noOffset = function(s) {
  var day= s.slice(0,-5).split(/\D/).map(function(itm){
    return parseInt(itm, 10) || 0;
  });
  day[1]-= 1;
  day= new Date(Date.UTC.apply(Date, day));  
  var offsetString = s.slice(-5)
  var offset = parseInt(offsetString,10)/100;
  if (offsetString.slice(0,1)=="+") offset*=-1;
  day.setHours(day.getHours()+offset);
  return day.getTime();
}

С MDN

JavaScript 1.8.5 note

Подмножество строк даты в формате ISO 8601 теперь также можно анализировать.

В качестве альтернативы строка даты / времени может быть в формате ISO 8601. Начиная с JavaScript 1.8.5 / Firefox 4 поддерживается подмножество ISO 8601. Например, «2011-10-10» (только дата) или «2011-10-10T14: 48: 00 (дата и время) могут быть переданы и проанализированы. Часовые пояса в датах ISO еще не поддерживаются, например,« 2011- 10-10T14: 48: 00 + 0200 "(с часовым поясом) пока не дает ожидаемого результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...