JSON.stringify中不同浏览器中日期值的差异

Tau*_*ren 17 javascript rest jquery json

我在HTML页面中有这个代码:

alert(JSON.stringify(new Date()));
Run Code Online (Sandbox Code Playgroud)

我在我的页面中包含了最新的json2.js(2009-09-29版本),以支持没有JSON.stringify()的旧浏览器.我还包括jquery-1.3.2.js.我相信具有原生JSON支持的新浏览器,它只是传递给本机JSON功能.

这是我在不同浏览器中得到的结果:

IE 8 on Windows XP: "2010-02-07T21:39:32Z"
Chrome 4.0 on Windows XP: "2010-02-07T21:39:59Z"
Firefox 3.0 of Windows XP: "2010-02-07T21:40:41Z"
Chrome 4.0 on Ubuntu linux:  "2010-02-07T21:41:49Z"
Firefox 3.0 on Ubuntu linux:  "2010-02-07T21:42:44Z"
Chrome 4.0 on Mac OSX: "2010-02-07T21:43:56Z"
Safari on Mac OSX: "2010-02-07T21:45:21Z"
Firefox 3.5 on Mac OSX: "2010-02-07T21:44:10.101Z"
Run Code Online (Sandbox Code Playgroud)

注意最后一个?它包含毫秒,而其他任何一个都没有.我没有在任何其他系统上安装FF3.5,但我假设它们会有相同的结果.

我可以做些什么来使所有平台上的所有日期字符串相同吗?我的后端REST服务可以配置一个格式字符串来反序列化JSON日期,但它不能支持多种格式,只有一种.

Tau*_*ren 9

我有这个工作添加以下javascript:

// Added to make dates format to ISO8601
Date.prototype.toJSON = function (key) {
    function f(n) {
        // Format integers to have at least two digits.
        return n < 10 ? '0' + n : n;
    }

    return this.getUTCFullYear()   + '-' +
         f(this.getUTCMonth() + 1) + '-' +
         f(this.getUTCDate())      + 'T' +
         f(this.getUTCHours())     + ':' +
         f(this.getUTCMinutes())   + ':' +
         f(this.getUTCSeconds())   + '.' +
         f(this.getUTCMilliseconds())   + 'Z';
};
Run Code Online (Sandbox Code Playgroud)

我敢肯定这可能会减慢序列化速度,但它似乎可以使浏览器的内容保持一致.