20

不必为每次调用date过滤器定义自定义格式,有没有办法全局定义默认格式(除了'medium')?

我希望将格式设置在一个文件中,而不是在我的代码中的所有位置(日期格式将来可能最终会被更改,并且在一个文件中进行修改会比在许多文件中进行更改要好得多)。

这就是我现在正在做的事情(每次定义日期格式):

{{systemTime | date:'dd MMMM @ HH:mm:ss'}}
{{modifiedTime | date:'dd MMMM @ HH:mm:ss'}}
{{getShippedTime() | date:'dd MMMM @ HH:mm:ss'}}
   etc.

我正在考虑创建一个自定义过滤器(我们称之为myDate),它将充当包装器,然后date使用我的自定义格式将日期字符串传递给 Angular 过滤器,所以我的代码可能看起来像这样:

{{systemTime | myDate}}
{{modifiedTime | myDate}}
{{getShippedTime() | myDate}}
   etc.

但是,我不知道如何使myDate过滤器指向 Angulardate过滤器。

谢谢你的帮助。

4

5 回答 5

41

基于更多的研究,然后考虑现代度的评论,我发现以下myDate过滤器将起作用:

.filter('myDate', function($filter) {    
    var angularDateFilter = $filter('date');
    return function(theDate) {
       return angularDateFilter(theDate, 'dd MMMM @ HH:mm:ss');
    }
});
于 2013-08-23T12:16:10.287 回答
6

尝试这个

angular.module('yourmodule').filter('myDate', function($filter)
{
    return function(input)
    {
        if(input == null){ return ""; }
        var _date = $filter('date')(new Date(input), 'dd MMMM @ HH:mm:ss');
        return _date.toUpperCase();
    };
});

html

{{systemTime | myDate}}

Angular js 中的日期过滤和格式化。

于 2014-04-08T10:01:36.907 回答
5

使用装饰器,

这不是您明确要求的,请使用decorator。它内置有角度,旨在修补servicesdirectivesfilters...

在您的情况下,如果未提供日期过滤器,则应使用自定义日期格式。

app.config(function ($provide) {
    $provide.decorator('dateFilter', function ($delegate) {
        return function () {

            // Check if the date format argument is not provided
            if (!arguments[1]) { 
                arguments[1] = 'dd MMMM @ HH:mm:ss';
            }

            var value = $delegate.apply(null, arguments);
            return value;
        };
    })
});
于 2016-03-07T15:53:16.117 回答
2

如果没有提供,则format默认为。mediumDate没有内置任何东西可以让它默认为其他东西。

https://github.com/angular/angular.js/blob/master/src/ng/filter/filters.js#L382

于 2013-08-23T00:13:08.963 回答
0

如果您正在使用 .aspx 页面并将日期格式存储在配置文件中......

  1. 从注入 Angular 页面的 .aspx 中,使用 web.config 日期格式设置全局变量

    var _settingsDateFormat = '<%=appSettings.DateFormat%>';

  2. 设置要通过您的应用程序使用的全局过滤器

yourModule.filter('myDateFormat', function ($filter) {
        return function (input) {
            if (input == null) { return ""; }
            var formattedDate = $filter('date')(new Date(input), _settingsDateFormat);
            return formattedDate;
        };
});
  1. 只需将自定义过滤器添加到您的日期

       Effective {{row.StartDate|myDateFormat}} - {{row.StopDate|myDateFormat}}
    
于 2015-12-11T16:35:14.077 回答