admin管理员组

文章数量:1391981

I am using highcharts to draw charts and parsing the date with new Date() function. In Chrome and FF, date is parsing fine.

But in IE and Safari, i am getting NaN and Invalid date format resp.

Below is the data i am getting from backend in (element.x) array

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

Now, i am converting it to Date object in JavaScript as below:

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

Now, this operation returns NaN in IE but works very well in chrome as below:

Chrome

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

IE

Array([0]=>NaN)

I am using highcharts to draw charts and parsing the date with new Date() function. In Chrome and FF, date is parsing fine.

But in IE and Safari, i am getting NaN and Invalid date format resp.

Below is the data i am getting from backend in (element.x) array

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

Now, i am converting it to Date object in JavaScript as below:

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

Now, this operation returns NaN in IE but works very well in chrome as below:

Chrome

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

IE

Array([0]=>NaN)
Share Improve this question asked May 3, 2016 at 10:35 GagsGags 3,8398 gold badges53 silver badges101 bronze badges 6
  • 1 Once you correctly parse the string, if you want an array of the time values, simply do datas.push(+xAxis), which will coerce the Date to a number, returning its time value. Or use xAxis.getTime() if you want something clearer. – RobG Commented May 3, 2016 at 22:42
  • But the problem was with new Date() function. It was not parsing date correctly. – Gags Commented May 4, 2016 at 1:39
  • Hence why it's a ment, not an answer—I'd already given John a +1. :-) Just thought I'd save you a heap of typing and unnecessarily calling Date.UTC. – RobG Commented May 4, 2016 at 1:56
  • and yes,,, This also worked.. doind +xAxis after correct parsing.. Awesome :) – Gags Commented May 4, 2016 at 4:09
  • 1 Per the the first ment. +xAxis is less to type but perhaps xAxis.getTime() is better for maintenance as it's explicit. Your choice. ;-) – RobG Commented May 4, 2016 at 5:44
 |  Show 1 more ment

1 Answer 1

Reset to default 5

The way new Date(dateString) parses dateString varies for different browsers, with some browsers being more flexible than others.

The safest way to create your date, is to...

  1. split up your element.x into its ponents
  2. convert those ponents to integer values
  3. create a new date using the syntax new Date(year, month, day)

So, instead of ...

var xAxis = new Date(element.x);

... create your date like this :

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

That should work in all browsers!

本文标签: jqueryJavaScript new Date() Returning NaN in IESafariStack Overflow