最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

jquery - JavaScript new Date() Returning NaN in IE, Safari - Stack Overflow

programmeradmin3浏览0评论

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!

发布评论

评论列表(0)

  1. 暂无评论