2016-05-03 5 views
1

ハイチャートを使用してチャートを描画し、new Date()機能で日付を解析しています。 ChromeとFFでは、日付が正しく解析されています。JavaScriptの新しい日付()IE、SafariでNaNを返す

しかし、IEとSafariでは、私はNaNと無効な日付形式を取得しています resp。以下は

は、私は今(element.x)配列

2016, 04,05 
2016, 04,06 
2016, 04,07 
2016, 04,08 
2016, 04,09 
2016, 04,10 

にバックエンドから取得していたデータですが、私は以下のようにJavaScriptでDateオブジェクトに変換しています:

//Loop starts 
var xAxis = new Date(element.x); 
datas.push([Date.UTC(xAxis.getUTCFullYear(),xAxis.getUTCMonth(), xAxis.getUTCDate())]); 
//Loop ends 

、この操作はIEでNaNを返しますが、以下のようにクロムで非常にうまく動作します。

Chrome

Array([0]=>140004454) - Unix Time stamp i get 

IE

Array([0]=>NaN) 
+1

文字列を正しく解析したら、時間値の配列が必要な場合は、単にdatas.push(+ xAxis)を実行します。これは、日付を数値に変換して時刻値を返します。あるいは、もっと明瞭にするために 'xAxis.getTime()'を使用してください。 – RobG

+0

しかし、問題は新しいDate()関数にありました。それは正しく日付を解析していませんでした。 – Gags

+0

なぜそれがコメントなのか、答えではない - 私はすでにジョン+1を与えている。 :-)ちょうど私はあなたに入力のヒープを保存し、不必要にDate.UTCを呼び出すと思った。 – RobG

答えて

5

new Date(dateString)は、いくつかのブラウザは他のものよりも柔軟であることと、異なるブラウザによって異なりdateString解析する方法。

あなたの日付を作成するための最も安全な方法は、...

  1. は、そのコンポーネント
  2. にあなたのelement.xを分割することです整数にこれらのコンポーネントを変換する構文new Date(year, month, day)を使用して新しい日付を作成

ので、代わりに...の

var xAxis = new Date(element.x); 

...このようなあなたの日付作成:すべてのブラウザで動作するはず

var xvals = element.x.split(','); 
var xAxis = new Date(
    parseInt(xvals[0]), 
    parseInt(xvals[1]) - 1, 
    parseInt(xvals[2]) 
); 

を!

+0

あなたは私の日を保存しました:) – Gags

+0

値を解析するためにプラス1つ。ところで、* parseInt *の必要はありません。 – RobG

+1

@ JohnSlegers-仕様で整数が指定されていません。 [* ECMA-262§20.3.2.1*](http://www.ecma-international.org/ecma-262/6。0 /#sec-date-year-month-date-hours-minutes-seconds-ms)は、型にかかわらず* ToNumber *を呼び出す必要があります。あなたの動機に賛成です。 – RobG

関連する問題