可能重复:
格式化 Microsoft JSON 日期?
ASP.NET 函数Json()
格式化并返回日期为
{"d":"\/Date(1240718400000)\/"}
这必须在客户端处理,这是有问题的。您对来回发送日期值的方法有什么建议?
可能重复:
格式化 Microsoft JSON 日期?
ASP.NET 函数Json()
格式化并返回日期为
{"d":"\/Date(1240718400000)\/"}
这必须在客户端处理,这是有问题的。您对来回发送日期值的方法有什么建议?
这是在 Stack Overflow 上的另一篇文章中发现的:
var date = new Date(parseInt(jsonDate.substr(6)));
substr 函数取出 "/Date(" 部分,parseInt 函数获取整数并忽略最后的 ")/"。结果数字被传递到 Date 构造函数中。
如果您没有绑定到 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 的良好(日期)时间
它可能很难看,但它有效:
var epoch = (new RegExp('/Date\\((-?[0-9]+)\\)/')).exec(d);
$("#field").text((new Date(parseInt(epoch[1]))).toDateString());
可能不需要匹配整个字符串,只需 (-?[0-9]+) 就足够了......
不是每个人都同意我的观点,这是一个好主意,但我发现自己最常返回格式化字符串而不是正确的日期。请参阅如何处理 ASP.NET AJAX 返回的 JSON 日期。
在玩过 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 格式并返回。
在客户端自动转换日期(如果您使用 jQuery)
--
您没有指定它,但由于您使用的是ASP.NET MVC,因此您可以使用 jQuery。如果这样做,如果您使用此博客文章中提供的代码,转换为实际日期会变得更简单。该代码扩展了 jQuery 的$.parseJSON()
功能,因此它自动将 ISO 和 ASP.NET 日期字符串转换为实际的 JavaScript 日期。
我将它与 ASP.NET MVC 一起使用,它就像一个魅力。最好的部分是它也向后兼容。使用的现有代码$.parseJSON()
将像以前一样工作(实际上工作相同),但如果您提供第二个参数并将其值设置为true
,所有日期都将自动为您转换。
该扩展在适用的情况下使用本机浏览器 JSON 支持,并且也适用于其他不支持的浏览器。无论如何,现代浏览器都支持此功能。
查看博客文章jQuery、Ajax、ASP.NET 和 dates。
它详细介绍了如何使用 ASP.NET MVC 和 jQuery 在服务器端和客户端之间通过 JSON 传递日期。