我有一个控制器操作,它实际上只是返回模型的JsonResult.因此,在我的方法中,我有如下内容:

return new JsonResult(myModel);

这很好用,除了一个问题.模型中有一个Date属性,该属性似乎在Json结果中返回,如下所示:

"\/Date(1239018869048)\/"

我应该如何处理日期,以便它们以我需要的格式返回?或者我如何在脚本中处理上面的格式?

推荐答案

仅仅是扩展到casperOne's answer.

JSON spec不包括日期值.MS必须进行调用,他们 Select 的路径是利用字符串的javascript表示中的一个小技巧:字符串文本"/"与"\/"相同,字符串文本将被序列化为"\/"(甚至"\/"必须映射为"\\/").

有关更好的解释,请参见http://msdn.microsoft.com/en-us/library/bb299886.aspx#intro_to_json_topic2(向下滚动到"从JavaScript文字到JSON")

JSON的一个痛点是 缺少日期/时间文字.许多 人们感到惊讶和失望 当他们第一次学到这一点的时候 遇到JSON.简单的解释 (安慰或不安慰)缺席 日期/时间文字是JavaScript 也从来没有过:支持 JavaScript中的日期和时间值为 完全通过日期提供 对象.大多数使用JSON的应用程序 因此,作为一种数据格式,通常 倾向于使用字符串或 表示日期和时间的数字 价值.如果使用字符串,则可以 通常期望它在ISO中 8601格式.如果使用数字, 取而代之的是,该值通常为 被认为是指……的数量 以通用坐标为单位的毫秒 纪元以来的时间(UTC),其中纪元是 定义为1970年1月1日午夜 (UTC).再说一次,这只是一个 约定,而不是JSON的一部分 标准的.如果您要交换数据 使用另一个应用程序,您将 需要查看其文档以查看 它如何编码日期和时间值 在JSON文字中.例如, 微软的ASP.NET AJAX既不使用也不使用 所描述的惯例的一部分.相反, 它将.NET日期时间值编码为 JSON字符串,其中 字符串为/日期(刻度)/以及其中 TICKS表示从 纪元(UTC).所以1989年11月29日, 上午4:55:30,UTC编码为 "\/日期(628318530718)\/".

一个解决方案就是把它解析出来:

value = new Date(parseInt(value.replace("/Date(", "").replace(")/",""), 10));

不过,我听说有一个设置可以让序列化程序输出DateTimenew Date(xxx)语法的对象.我会试着把它挖出来.


第二个参数JSON.parse()接受一个reviver函数,其中规定了在返回之前,最初产生的值是如何产生的.

以下是日期的示例:

var parsed = JSON.parse(data, function(key, value) {
  if (typeof value === 'string') {
    var d = /\/Date\((\d*)\)\//.exec(value);
    return (d) ? new Date(+d[1]) : value;
  }
  return value;
});

JSON.parse()人的文件

Javascript相关问答推荐

Angular 形式,从DOM中删除不会删除指定索引处的内容,但会删除最后一项

为什么这个.add.group({})在教程中运行得很好,但在我的游戏中就不行了?

为什么可选参数的顺序会导致问题?

匹配一个或多个可选重复的特定模式

如何根据输入数量正确显示alert ?

如何使用抽屉屏幕及其子屏幕/组件的上下文?

如何在AG-Grid文本字段中创建占位符

在没有任何悬停或其他触发的情况下连续交换图像

如何使用useparams从react路由中提取id

如果未定义,如何添加全局变量

Playwright:ReferenceError:browserContext未定义

为什么我的Reaction组件不能使用createBrowserRouter呈现?

使用JAVASCRIPT的偏移力矩函数库问题

我的NPM Vue库没有生成/导出TS类型

使用JavaScript的浏览器无法在表单中工作

有没有一种方法可以修改事件输出,而不是使用EventContent完全重新构建它?

这是个窃听器吗?JavaScript在赋值时更改变量的数值

如何在Vue.js中将props 作为参数传递

在Java脚本中按下某个键时创建临时图像

如何隐藏包含 Select 字段的div,而不重置其选定值?