我见过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

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


当前回答

首选的方法是使用2018-04-23T18:25:43.511Z。。。

下图显示了为什么这是首选方式:

因此,正如您所看到的,Date有一个原生的方法toJSON,它以这种格式返回,并且可以很容易地再次转换为Date。。。

其他回答

JSON对日期一无所知。.NET所做的是非标准的黑客/扩展。

我会使用一种可以很容易地转换为JavaScript中的Date对象的格式,即可以传递给新的Date(…)的格式。最简单也是最可移植的格式是1970年以来包含毫秒的时间戳。

以下代码对我有效。此代码将以DD-MM-YYYY格式打印日期。

DateValue=DateValue.substring(6,8)+"-"+DateValue.substring(4,6)+"-"+DateValue.substring(0,4);

否则,还可以使用:

DateValue=DateValue.substring(0,4)+"-"+DateValue.substring(4,6)+"-"+DateValue.substring(6,8);

没有正确的格式;JSON规范没有指定交换日期的格式,这就是为什么有这么多不同的方法。

最好的格式可以说是以ISO 8601格式表示的日期(参见维基百科);它是一种众所周知且广泛使用的格式,可以跨多种不同语言处理,因此非常适合互操作性。例如,如果您可以控制生成的json,则可以以json格式向其他系统提供数据,选择8601作为日期交换格式是一个不错的选择。

例如,如果您无法控制生成的json,那么您是来自多个不同现有系统的json的使用者,最好的处理方法是使用日期解析实用程序函数来处理不同的格式。

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

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

2012-04-23T18:25:43.511Z

原因如下:

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

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

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

{
    "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"
            }
}