为什么Date类返回NaN?

时间:2014-07-13 07:50:27

标签: javascript date

将时间戳转换为可读日期时获得奇怪的结果。

var date = new Date(x);

console.log(x);

showTooltip(item.pageX, item.pageY, (date.getMonth()+1)+"-"+date.getDate()+"-"+date.getFullYear()+" / "+y );

控制台显示例如' 1404792000000'所以时间戳很好,但输出结果是NaN-NaN-NaN / 864'

我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

使用typeof函数验证x,如下所示:

console.log(typeof x);

如果是时间戳(如1404792000000),X必须是数字(int),如果x是字符串,则使用parseInt()函数。

var date = new Date(parseInt(x));

showTooltip(item.pageX, item.pageY, (date.getMonth()+1)+"-"+date.getDate()+"-"+date.getFullYear()+" / "+y );

示例:

date = new Date("1404792000000"); // String : Date {Invalid Date}

date = new Date(1404792000000); // Integer : Date {Tue Jul 08 2014 ...}

date = new Date(parseInt("1404792000000")); // Str to int : Date {Tue Jul 08 2014 ...}

如果没有parseInt,请使用计算器运算符。 (@RobG评论)

像这样:

date = new Date(+"1404792000000"); // Str to int

Which is better to use for a calculator parseInt() or eval() in Javascript?

答案 1 :(得分:1)

原因是new Date('1404792000000')导致“无效日期”对象,因此所有访问方法(例如getMonth)都返回NaN。这是因为the date constructor does not accept a string representing the epoch milliseconds

new Date(1404792000000)比较,即“2014年7月7日星期一21:00:00 GMT-0700(太平洋夏令时间)”。注意如何指定