1

可能重复:
帮助在 Javascript 中解析 ISO 8601 日期

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

从 WEB API,我selected通过 ajax 接收到对象,它的属性之一是 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 中显示。

4

3 回答 3

2

做这个:

new Date(selected.InspectionDate + "Z")

理由:您的日期采用ISO 8601格式。时区指示符,如"Z"UTC 的一个非常短的指示符,可以工作。

笔记!IE 可能无法理解 ISO 8601 日期。所有的赌注都取消了。在这种情况下,最好使用datejs

于 2012-08-22T17:42:35.100 回答
1

更新:

首先,正如有人建议的那样,我在引用 date.js 之后尝试了以下操作。

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

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

所以我的解决方案是

function dateParse(str) {
    var arr = str.split('.');
    return Date.parse(arr[0]);
}
...
selected.JsInspectionDate = dateParse(selected.InspectionDate);
于 2012-08-22T19:12:48.990 回答
0

小提琴

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());
于 2012-08-22T17:55:31.647 回答