请解释这个关于日期构造函数的javascript调试器输出

问题描述:

我想实例化一个日期,以便代码在Chrome和IE(等)中工作。理想情况下,如果可能的话,我希望找到一个简单的声明而不是UDF。当时间块表示为T00:00:00时,是不是可以Date.parse JavaScript中的字符串值?请解释这个关于日期构造函数的javascript调试器输出

下面是我在Visual Studio中立即窗口中的内容; caldate包含由后端数据库返回的日期的字符串表示形式;将该字符串传递给Date.parse()将返回时间戳1371441600000,并将该时间戳传递给Date()构造函数返回Mon Jun 17 00:00:00 EDT 2013[prototype]: Invalid Date

?caldate 
"2013-06-17T00:00:00" 
?Date.parse(caldate); 
1371441600000 
?new Date(Date.parse(caldate)); 
Mon Jun 17 00:00:00 EDT 2013 
    [prototype]: Invalid Date 
+0

你是说上面的工作在Chrome中,但不是在IE中? – nnnnnn

Invalid Date是正常的。这正是调试器为Date的原始对象打印的内容。我相信这是因为调试器调用原始对象上的toString方法而不提供实际的Date实例,因此toString方法返回"Invalid Date"。我建议你阅读MDN documentation on Date

您可以使用new Date(caldate)从字符串创建Date

+0

'new Date(caldate)'在Chrome中返回第16位,在IE中返回第17位。感谢您的链接。 – Tim

+0

时区问题。 – Tim

+0

下面是关于日期格式的浏览器兼容性的很好的图表:http://dygraphs.com/date-formats.html。这也是:http://blog.dygraphs.com/2012/03/javascript-and-dates-what-mess.html你正在使用的字符串应该适用于现代浏览器。你所看到的16日和17日之间的区别可能是字符串被解释为UTC还是本地时间之间的区别。也许我提供的链接可以帮助你理清。 – Brandon