将JSON日期字符串转换为正确的Date对象

时间:2012-08-22 17:22:07

标签: javascript

  

可能重复:
  Help parsing ISO 8601 date in Javascript

我认为这应该很简单,但结果却非常乏味。

从WEB API,我通过ajax收到selected个对象,其中一个属性是InspectionDate日期时间字符串,例如2012-05-14T00:00:00

在javascript中,我使用以下代码来获得正确的日期对象

selected.JsInspectionDate = new Date(selected.InspectionDate);

但JsInspectionDate显示

2012/05/14 00:00 in firefox, 
2012/05/13 20:00 in chrome and 
NAN in IE9

代表2012-05-14T00:00:00.

有人能告诉我为什么会出现这个问题吗?以及如何解决这个问题?我只想在Firefox中为所有浏览器显示。

3 个答案:

答案 0 :(得分:2)

这样做:

new Date(selected.InspectionDate + "Z")

理由:您的约会日期为ISO 8601。像"Z"这样的时区指示符,对于UTC来说非常短,可以工作。

注意! IE可能无法理解ISO 8601日期。所有赌注都已关闭。在这种情况下,最好使用datejs

答案 1 :(得分:1)

<强>更新

首先如同一个人建议的那样,我在引用date.js之后尝试了跟进。

selected.JsInspectionDate = Date.parse(selected.InspectionDate);

它似乎工作但后来我发现它还不够,因为JSON日期字符串的格式为2012-05-14T00:00:00.0539,date.js也无法处理。

所以我的解决方案是

function dateParse(str) {
    var arr = str.split('.');
    return Date.parse(arr[0]);
}
...
selected.JsInspectionDate = dateParse(selected.InspectionDate);

答案 2 :(得分:0)

FIDDLE

var selectedDate='2012-05-14T00:00:00';
var formatttedDate=new Date(selectedDate.substr(0,selectedDate.indexOf('T')));

document.write(formatttedDate.getFullYear()+'/'+(formatttedDate.getMonth()<10?'0'+formatttedDate.getMonth():formatttedDate.getMonth())+'/'+formatttedDate.getDay());