奇怪的Date()解析错误

时间:2014-03-19 03:51:10

标签: javascript

所以我有以下字符串“2013-12-10 23:33:05”

当我在jsfiddle中var d = new Date("2013-12-10 23:33:05");时。 http://jsfiddle.net/38TuV/1/

d包含正确的对象,没有问题。

然而,在我的网站上,当我做

var date = '2013-12-10 23:33:05';
var d =  new Date(date);

d是无效数据。如果你会看到小提琴,我甚至会做出同样的副本,而且它似乎也可以工作

这很奇怪,它可能是我的页面特有的东西但是我正在登录data它打印'2013-12-10 23:33:05'所以我不知道......有什么想法吗?

3 个答案:

答案 0 :(得分:1)

如果您确定日期的格式为'YYYY-MM-DD HH:MM:SS',请在firefox上试试

var date = '2013-12-10 23:33:05'.replace(' ', 'T');
var d =  new Date(date);

答案 1 :(得分:1)

在ES5之前,Date.parse解析日期字符串(与使用Date constructor解析相同)完全取决于实现。 ES5为兼容实现引入了version of ISO 8601,但并非所有使用的浏览器都符合要求。

因此,解析字符串日期和时间值的最佳方法是自己解析它。使用Date.parse的ES5版本,没有时区的ISO 8601格式字符串将被视为UTC,因此:

function parseUTCDateTime(s) {
  s = s.split(/\D+/g);
  return new Date(Date.UTC(s[0], --s[1], s[2], s[3], s[4], s[5], 0));
}

parseUTCDateTime('2013-12-10 23:33:05'); // Wed 11 Dec 07:33:05 UTC+0800 2013

答案 2 :(得分:0)

您在JSFiddle外部资源中定义了dateclass.js

我删除它,它工作正常。 http://jsfiddle.net/38TuV/2/

我不知道你为什么拥有它,也许它是一个垫片。无论如何,它在控制台中没有它也可以正常工作。

使用Chromium控制台(control-shift-J),它运行良好:

var date = '2013-12-10 23:33:05';
var d =  new Date(date);
undefined // chromium console is printing the return value of the assignment, undef is OK
date
"2013-12-10 23:33:05"
d
Tue Dec 10 2013 23:33:05 GMT-0500 (EST)