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

时间:2013-08-22 19:24:25

标签: 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.

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

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

但是,我无法弄清楚如何将myDate过滤器指向Angular date过滤器。

感谢您的帮助。

5 个答案:

答案 0 :(得分:40)

根据更多研究,然后考虑现代评论的评论,我发现以下myDate过滤器可以使用:

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

答案 1 :(得分:5)

试试这个

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}}

Date filtering and formatting in Angular js.

答案 2 :(得分:4)

使用装饰器,

这不是您明确要求的内容,请使用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;
        };
    })
});

答案 3 :(得分:2)

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

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

答案 4 :(得分:0)

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

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

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

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

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