6

我有一个显示以下表达式的 ng-repeat

{{date}} // 2-1-2017

当我使用角力矩

{{date | amDateFormat:'DD'}} 

我得到了 1,我期待 2。如何让时刻知道我的格式实际上dd-mm-yyyy不在mm-dd-yyy视图中?我不想在我的控制器级别解析它,因为它很复杂。

4

4 回答 4

3

根据文档,AngularJs 有一个内置的日期过滤器,可以与以下集合一起使用:

{{ date_expression | date : format : timezone}}

这样您就可以像这样使用它:

{{ date | date:'dd-MM-yyyy'}}

但是,如果您使用时刻的日期过滤器,它必须是时刻日期(即,定义了时区的完整日期)对象,您可以像 angular 一样过滤它。

{{ date | amDateFormat:'dd-MM-yyyy' }}
于 2016-12-30T15:35:28.953 回答
3

如果您的输入是:您可以对日期使用角度内置过滤器(如其他答案中所建议)

  • 一个 JavaScript 日期对象
  • 表示毫秒的数字(也可以是字符串)
  • ISO 8601 格式的字符串(例如yyyy-MM-ddTHH:mm:ss.sssZyyyy-MM-dd等)

date是一个格式不是ISO 8601 的字符串,因此您必须更改解析2-1-2017为日期的方式。

您可以使用moment(String, String)以下示例中所示解析控制器中的字符串:

angular.module('MyApp',['angularMoment'])
.controller('AppCtrl', function($scope) {
  $scope.dates = [
    // Wrong way to parse string
    moment('2-1-2017').toDate(),
    // Parse string specifying format
    moment('2-1-2017', 'D-M-YYYY').toDate()
  ];
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.9/angular.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-moment/1.0.1/angular-moment.min.js"></script>

<div ng-app="MyApp" ng-controller="AppCtrl">
  <div ng-repeat="date in dates">
    <span>angular-moment: {{date | amDateFormat:'DD'}}</span>
    <span>angular date filter: {{date | date:"dd"}}</span>
  </div>
</div>

如果您不想修改控制器,可以使用角矩amParse过滤器。正如文档所说,这个过滤器:

将自定义格式的日期解析为可与am-time-ago指令和其他过滤器一起使用的时刻对象。

因此,在您的情况下,您可以使用以下示例中显示的代码:

angular.module('MyApp',['angularMoment'])
.controller('AppCtrl', function($scope) {
  $scope.dates = [
    '2-1-2017', // February 2 2017
    '15-1-2017' // January 15 2017
  ];
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.9/angular.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-moment/1.0.1/angular-moment.min.js"></script>

<div ng-app="MyApp" ng-controller="AppCtrl">
  <div ng-repeat="date in dates">
    <span>angular-moment: {{date | amParse:'D-M-YYYY' | amDateFormat:'DD'}}</span>
  </div>
</div>

于 2016-12-30T16:13:58.317 回答
1

我认为您的问题可能与您如何构建日期对象有关

new Date("2-1-2017") ; // Wed Feb 01 2017

如果我这样做,1 表示日期,这是正确的。日期过滤器根据接收到的对象解析日期,您应该为输入日期寻找正确的日期格式。

于 2016-12-30T15:39:12.587 回答
0

您应该使用角度过滤器,例如:

{{date | date:'dd-MM-yyyy'}}
于 2016-12-30T15:37:31.993 回答