36

可能重复:
格式化 Microsoft JSON 日期?

ASP.NET 函数Json()格式化并返回日期为

{"d":"\/Date(1240718400000)\/"}

这必须在客户端处理,这是有问题的。您对来回发送日期值的方法有什么建议?

4

7 回答 7

29

这是在 Stack Overflow 上的另一篇文章中发现的:

var date = new Date(parseInt(jsonDate.substr(6))); 

substr 函数取出 "/Date(" 部分,parseInt 函数获取整数并忽略最后的 ")/"。结果数字被传递到 Date 构造函数中。

于 2010-07-14T12:34:54.817 回答
11

如果您没有绑定到 MS JSON 序列化程序,您可以使用Json.NET。它带有一个 IsoDateTimeConverter 来处理序列化日期的问题。这会将日期序列化为ISO 8601格式的字符串。

例如,在我们的项目中,序列化myObject是通过以下代码处理的。

JsonNetResult jsonNetResult = new JsonNetResult();
jsonNetResult.Formatting = Formatting.Indented;
jsonNetResult.SerializerSettings.Converters.Add(new IsoDateTimeConverter());
jsonNetResult.Data = myObject;

如果您决定尝试 Json.NET,您还需要获取JsonNetResult,因为它返回可在 ASP.NET MVC 应用程序中使用的 ActionResult。它很容易使用。

有关更多信息,请参阅:使用 Json.NET 的良好(日期)时间

于 2009-08-12T01:31:59.253 回答
6

它可能很难看,但它有效:

 var epoch = (new RegExp('/Date\\((-?[0-9]+)\\)/')).exec(d);
 $("#field").text((new Date(parseInt(epoch[1]))).toDateString());

可能不需要匹配整个字符串,只需 (-?[0-9]+) 就足够了......

于 2009-10-26T05:08:42.000 回答
5

不是每个人都同意我的观点,这是一个好主意,但我发现自己最常返回格式化字符串而不是正确的日期。请参阅如何处理 ASP.NET AJAX 返回的 JSON 日期

于 2009-08-12T01:00:25.887 回答
1

在玩过 Json.NET 库之后,我想知道为什么您会选择使用 IsoDateTimeConverter 而不是 JavascriptDateTimeConverter。

我发现这更容易与我在从 MVC 控制器序列化日期时 使用的Ext JS接口一起使用。

JsonNetResult jsonNetResult = new JsonNetResult();
jsonNetResult.Formatting = Formatting.Indented;
jsonNetResult.SerializerSettings.Converters.Add(new JavaScriptDateTimeConverter());
jsonNetResult.Data = myObject; 

我将这些数据返回到 Ext.data.JsonStore 中,它能够将返回值作为日期获取,而无需我指定要解析的日期格式。

        store:new Ext.data.JsonStore({
            url: pathContext + '/Subject.mvc/Notices',
            baseParams: { subjectId: this.subjectId },
            fields: [
               {name: 'Title'},
               {name: 'DateCreated', type: 'date' }
            ]
        }),

返回的 JSON 如下所示:

[{"Title":"Some title","DateCreated":new Date(1259175818323)}]

如果您不需要,没有任何理由转换为 ISO 8601 格式并返回。

于 2009-11-25T19:13:37.413 回答
1

在客户端自动转换日期(如果您使用 jQuery)

--

您没有指定它,但由于您使用的是ASP.NET MVC,因此您可以使用 jQuery。如果这样做,如果您使用此博客文章中提供的代码,转换为实际日期会变得更简单。该代码扩展了 jQuery 的$.parseJSON()功能,因此它自动将 ISO 和 ASP.NET 日期字符串转换为实际的 JavaScript 日期。

我将它与 ASP.NET MVC 一起使用,它就像一个魅力。最好的部分是它也向后兼容。使用的现有代码$.parseJSON()将像以前一样工作(实际上工作相同),但如果您提供第二个参数并将其值设置为true,所有日期都将自动为您转换。

该扩展在适用的情况下使用本机浏览器 JSON 支持,并且也适用于其他不支持的浏览器。无论如何,现代浏览器都支持此功能。

于 2010-12-27T15:58:19.093 回答
0

查看博客文章jQuery、Ajax、ASP.NET 和 dates

它详细介绍了如何使用 ASP.NET MVC 和 jQuery 在服务器端和客户端之间通过 JSON 传递日期。

于 2009-08-12T00:54:11.153 回答