我见过JSON日期格式的许多不同标准:

"\"\\/Date(1335205592410)\\/\""         .NET JavaScriptSerializer
"\"\\/Date(1335205592410-0500)\\/\""    .NET DataContractJsonSerializer
"2012-04-23T18:25:43.511Z"              JavaScript built-in JSON object
"2012-04-21T18:25:43-05:00"             ISO 8601

哪一个是正确的?还是最好的?这方面有什么标准吗?


当前回答

来自RFC 7493(I-JSON消息格式):

I-JSON代表Internet JSON或互操作JSON,具体取决于您询问的对象。

协议通常包含设计用于包含时间戳或持续时间。建议所有此类数据按照规定,项目以ISO 8601格式表示为字符串值在RFC 3339中,附加的限制是大写不包括时区默认值,并且即使在它们的值为“00”。还建议所有数据项包含持续时间符合RFC 3339的附录A,具有相同的附加限制。

其他回答

来自RFC 7493(I-JSON消息格式):

I-JSON代表Internet JSON或互操作JSON,具体取决于您询问的对象。

协议通常包含设计用于包含时间戳或持续时间。建议所有此类数据按照规定,项目以ISO 8601格式表示为字符串值在RFC 3339中,附加的限制是大写不包括时区默认值,并且即使在它们的值为“00”。还建议所有数据项包含持续时间符合RFC 3339的附录A,具有相同的附加限制。

在Sharepoint 2013中,获取JSON格式的数据时,没有将日期转换为仅日期格式的格式,因为在该格式中,日期应为ISO格式

yourDate.substring(0,10)

这可能对你有帮助

JSON本身并没有指定日期的表示方式,但JavaScript确实如此。

您应该使用Date的toJSON方法发出的格式:

2012-04-23T18:25:43.511Z

原因如下:

它是人类可读的,但也简洁它排序正确它包括分数秒,这有助于重建年表符合ISO 8601ISO 8601已在国际上建立了十多年ISO 8601由W3C、RFC3339和XKCD认可

也就是说,每一个写过的日期库都可以理解“自1970年以来的毫秒”。因此,为了便于携带,ThiefMaster是正确的。

“2014-01-01T23:28:56.782Z”

日期以表示UTC时间(由Z表示)的标准可排序格式表示。ISO 8601还通过将Z替换为时区偏移的+或–值来支持时区:

“2014-02-01T09:28:56.321-10:00”

ISO 8601规范中的时区编码还有其他变体,但–10:00格式是当前JSON解析器支持的唯一TZ格式。一般来说,最好使用基于UTC的格式(Z),除非您特别需要确定生成日期的时区(只有在服务器端生成时才可能)。

NB:

    var date = new Date();
    console.log(date); // Wed Jan 01 2014 13:28:56 GMT- 
    1000 (Hawaiian Standard Time) 
        
    var json = JSON.stringify(date);
    console.log(json);  // "2014-01-01T23:28:56.782Z"

告诉你,这是首选方式,尽管JavaScript没有标准格式

// JSON encoded date
var json = "\"2014-01-01T23:28:56.782Z\"";

var dateStr = JSON.parse(json);  
console.log(dateStr); // 2014-01-01T23:28:56.782Z

这是我的工作与解析服务器

{
    "ContractID": "203-17-DC0101-00003-10011",
    "Supplier":"Sample Co., Ltd",
    "Value":12345.80,
    "Curency":"USD",
    "StartDate": {
                "__type": "Date",
                "iso": "2017-08-22T06:11:00.000Z"
            }
}