1

我在 IE 中显示日期时遇到问题,下面是我试图在 UI 中显示 inStoreDate 和 firstMarkDownDate 日期的 JSON 结构。它在 FF 和 Chrome 中运行良好,但我在使用 IE 时遇到了问题。在 IE 中显示为 NaN。

"data":[
  {
    "Id": "123",
    "inDate": [
        2012,
        12,
        17
    ]
  }
]

我正在使用以下日期格式功能在显示之前格式化日期。

formatDate: function(longDate) {
    var d = new Date(longDate);
    return ('0' + (d.getMonth()+1)).slice(-2) + '/'
            + ('0' + (d.getDate())).slice(-2) + '/'
            + d.getFullYear();
}

formatDate(data.inDate);
4

2 回答 2

0

根据MSDN Date specification,没有标准化的方法将对象作为参数传递给 Date() 函数。

您很可能需要更改代码以将年、月和日传递给函数,如下所示:

self.inStoreDate = formatDateWithZero(data.inStoreDate[0], data.inStoreDate[1], data.inStoreDate[2]);

...或更新您的功能以获取数组,但从中为 Date 构造函数提取这些值:

formatDateWithZero: function(longValue) {
    var date = new Date(longValue[0], longValue[1], longValue[2]);
    return ('0' + (date.getMonth()+1)).slice(-2) + '/'
            + ('0' + (date.getDate())).slice(-2) + '/'
            + date.getFullYear();
}

self.inStoreDate = formatDateWithZero(data.inStoreDate);

工作 JSFiddle:http: //jsfiddle.net/pt75S/2/

于 2013-09-24T15:27:21.047 回答
0

您正在将数组传递给Date构造函数,这是导致问题的原因。数组(作为所有对象)将被字符串化,然后在输入Date构造函数时被解析为字符串 - 但是 IE 不会将格式识别"2012,12,17"为有效日期,而 Chrome 会。

相反,您应该分别传递三个单个值:

var date = new Date(longValue[0], longValue[1], longValue[2]);
于 2013-09-24T15:31:10.953 回答