1

我有一些日期 ISO 字符串,我想将它们格式化为人类可读的日期。我正在使用angular-moment库在我的模板中使用过滤器来格式化这些日期。

<span>{{ $ctrl.date | amCalendar:referenceTime:formats }}</span>

我想自定义显示的日期格式如下:

const dateFormats = {
  relative: {
    sameDay: '[Today at] LT',
    lastWeek: 'DD MMM, YYYY [at] LT',
    sameElse: 'DD MMM, YYYY [at] LT'
  }
}

所以我可以在我的模板中这样做:

<span>{{ $ctrl.date | amCalendar:null:dateFormats }}</span>

但是,我希望它们dateFormats能够在全局的某个地方而不是仅在该组件的控制器中存在,因为我希望能够dateFormats在其他模板中引用它们。

这是否有资格作为适当的用例附加dateFormats$scope或是否有更好的方法来处理这个问题?

任何帮助表示赞赏。提前致谢!

4

3 回答 3

2

我为日期所做的是创建一个自定义过滤器
,例如:

function ascDateFilter($filter) {
    return function (input) {
        return $filter('date')(input, "dd/MM HH:mm:ss");
    };
}

你可以做这样的事情并在你的自定义过滤器中使用 amCalendar 过滤器。有了这个,您就可以在同一个过滤器中使用模板化日期的所有代码。

于 2017-04-13T11:57:44.313 回答
2

您应该创建自己的自定义过滤器。像这样的东西:

angular
  .module('myApp')
  .filter('myDateFormat', ['$filter',function ($filter) {
      const dateFormats = {
        relative: {
          sameDay: '[Today at] LT',
          lastWeek: 'DD MMM, YYYY [at] LT',
          sameElse: 'DD MMM, YYYY [at] LT'
        } 
      }
      return function() {
        return $filter('amCalendar')(null, dateFormats)
      }
  }]);

现在,您可以轻松地从模块中的任何模板中使用此过滤器:

<span>{{ $ctrl.date | myDateFormat }}</span>
于 2017-04-13T12:25:36.230 回答
0

无需创建自定义过滤器,您可以amCalendar在运行函数中自定义,如docs.

这是一个工作示例:

angular.module('MyApp',['angularMoment'])
.run(function(){
  const dateFormats = {
    calendar: {
      sameDay: '[Today at] LT',
      lastWeek: 'DD MMM, YYYY [at] LT',
      sameElse: 'DD MMM, YYYY [at] LT'
    }
  }
  moment.updateLocale('en', dateFormats);
})
.controller('AppCtrl', function($scope) {
  $scope.date = new Date();
});
<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">
  <span>{{ date | amCalendar }}</span>
</div>

于 2017-04-13T13:23:16.743 回答