5

我正在使用 AngularJS 从 ASP.NET 服务器应用程序获取数据并将其显示在客户端。这是我得到的:

ProjectID │ CreatedOn
══════════╪══════════════════════
13241     │ /Date(1338364250000)/   
13411     │ /Date(1338370907000)/   

如您所见,日期显示不正确。我想将日期格式化为YYYY-MM-DD HH:MM:SS. 我怎样才能做到这一点?


HTML 视图:

<div ng-app ng-controller="FirstCtrl">
    <table>
        <thead>
            <tr>
                <td>
                    ProjectID
                </td>
                <td>
                    CreatedOn
                </td>
            </tr>
        </thead>
        <tbody>
            <tr ng-repeat="team in teams" class="thumbnail">
                <td>
                    {{team.ProjectID}}
                </td>
                <td>
                    {{team.CreatedOn}}
                </td>
            </tr>
        </tbody>
    </table>
</div>

动作方法:

public JsonResult GetUser()
{
   return Json(new { data = ProjectService.GetPrefixUsedCount(1).ToArray() });
}

返回的 JSON 结果:

{"data":[{"ProjectID":13241,"CreatedOn":"\/Date(1338364250000)\/"},
{"ProjectID":13411,"CreatedOn":"\/Date(1338370907000)\/"}]
4

4 回答 4

16

快速修复

如果无法更改 MVC 中的格式,您可以这样做:

{{ team.CreatedOn.slice(6, -2) | date: 'yyyy-MM-dd HH:mm:ss' }}

关键是.slice(6, -2)——它去掉了所有多余的垃圾,只剩下纪元时间。


想要过滤器?

如果您经常使用它,您可能更喜欢自定义过滤器。这个包装了现有的date过滤器

.filter('mvcDate', ['$filter', $filter =>
  (date, format, timezone) =>
    date && $filter('date')(date.slice(6, -2), format, timezone)
]);

现在只需date用我们的自定义过滤器替换过滤器:

{{ team.CreatedOn | mvcDate: 'yyyy-MM-dd HH:mm:ss' }}

这是一个关于 JSFiddle 的工作示例

于 2014-08-14T16:41:53.130 回答
4

创建自定义过滤器,如下所示:

app.filter("dateFilter", function () {
    return function (item) {
        if (item != null) {
            return new Date(parseInt(item.substr(6)));
        }
        return "";
    };
});

然后,您可以在 HTML 中应用过滤器

<tr ng-repeat="team in teams" class="thumbnail">
<td>{{team.CreatedOn | dateFilter | date:"dd-MM-yyyy"}}</td>

希望能帮助到你。

于 2015-07-23T17:34:09.950 回答
2

你可能应该看看

http://docs.angularjs.org/api/ng.filter:date

它为您提供了以所需格式修改和显示日期的所有必要工具。

编辑 :

您能否修改您的服务器以不将日期发送为 Date(****) 但只是 **** 很好...如果您将日期发送为 Date(****),那么您将剩下 2两个选项都不好。

  1. 评估日期。NO eval .. 这对您的健康不利。
  2. 使用正则表达式的组合去除日期。再次,它可能..但不推荐。

为什么要把它寄进来剥掉?为什么不把它从服务器端本身拿出来呢?

于 2013-04-19T12:50:39.093 回答
1

在您的 ASP.NET MVC 域模型中,有一个额外的属性可以呈现 angular 预期的格式。

 public string CreatedOnJson
         {
             get
             {
                 return JsonConvert.SerializeObject(CreatedOn, new JavaScriptDateTimeConverter()).Replace("new Date(","").Replace(")","");

             }
         }

这样您就可以使用角度日期过滤器以您喜欢的方式显示:

 {{team.CreatedOn | date:'yyyy-MM' }}
于 2013-05-13T08:38:28.107 回答