设置AngularJS日期过滤器格式以供日期过滤器的所有引用使用?

Kab*_*bb5 19 angularjs angularjs-filter

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

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

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

{{systemTime | date:'dd MMMM @ HH:mm:ss'}}
{{modifiedTime | date:'dd MMMM @ HH:mm:ss'}}
{{getShippedTime() | date:'dd MMMM @ HH:mm:ss'}}
   etc.
Run Code Online (Sandbox Code Playgroud)

我正在考虑创建一个自定义过滤器(让它调用它myDate),它将充当包装器,然后date使用我的自定义格式将日期字符串传递给Angular 过滤器,因此我的代码可能如下所示:

{{systemTime | myDate}}
{{modifiedTime | myDate}}
{{getShippedTime() | myDate}}
   etc.
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚如何使myDate滤镜指向角度date滤镜.

谢谢你的帮助.

Kab*_*bb5 41

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

.filter('myDate', function($filter) {    
    var angularDateFilter = $filter('date');
    return function(theDate) {
       return angularDateFilter(theDate, 'dd MMMM @ HH:mm:ss');
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 您还可以包含'dateFilter',而不是包含'$ filter',并从名称中抓取日期过滤器.定义'foo'过滤器时,'fooFilter'会自动作为依赖项名称使用. (2认同)

Pra*_*obh 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();
    };
});
Run Code Online (Sandbox Code Playgroud)

HTML

{{systemTime | myDate}}
Run Code Online (Sandbox Code Playgroud)

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


Jos*_*ush 5

使用装饰器,

这不是你明确要求的,使用装饰器。它内置的角度和设计的补丁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;
        };
    })
});
Run Code Online (Sandbox Code Playgroud)