chromeと他のブラウザのjavascript date.parseの違い

graph.facebook APIから取得した日付文字列 "2011-11-24T09:00:27 + 0000"があります。

私が走るとき

var timestamp = Date.parse(facebookDate);

クロム中。私は日付に関連するタイムスタンプを取得します!完璧!

しかし、他のすべての主要なブラウザで...私は "NaN"を得る!!! ?

確かにこれらのブラウザはすべて同じjavascript解析関数を使用していますか?

誰も同じJavaScript関数が異なる結果をもたらす理由を説明できますか?

そして誰も私にこの問題を解決する方法を教えてもらえますか?

前もって感謝します

アレックス

15
最初のスクリプトはオフセットを減算するのではなく、オフセットを追加してから更新されたスクリプトを参照してください。
追加された 著者 mplungjan,
@アレックス - それはいつも+0000なので、それをZに変えることができるからです
追加された 著者 mplungjan,
"確かに、これらのブラウザはすべて同じjavascript解析機能を使用していますか?" Web開発へようこそ。
追加された 著者 user123444555621,

1 答え

ここでは、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();
}

From MDN

JavaScript 1.8.5メモ

ISO 8601形式の日付文字列のサブセットも解析できるようになりました。

また、日付/時刻文字列はISO 8601形式でもかまいません。 JavaScript 1.8.5/Firefox 4以降、ISO 8601のサブセットがサポートされています。たとえば、「2011-10-10」(日付のみ)または「2011-10-10T14:48:00(日付と時刻)」を渡して解析することができます。ISO日付のタイムゾーンはまだサポートされていないため、 10-10T14:48:00 + 0200 "(タイムゾーン付き)はまだ意図した結果を得ていません。

10
追加された
美しく、完璧に動作します。どうもありがとうございます。
追加された 著者 Warpling,
ありがとう、mplungjan、あなたは私の日を救った!
追加された 著者 avenet,
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript