相反,必须为每个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
过滤器。
感谢您的帮助。
答案 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}}
答案 2 :(得分:4)
这不是您明确要求的内容,请使用decorator。它内置有角度,旨在修补services
,directives
,filters
等...
在您的情况下,如果未提供日期过滤器,则应使用自定义日期格式。
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页面并将日期格式存储在配置文件中......
从注入Angular页面的.aspx中,使用web.config日期格式设置全局变量
var _settingsDateFormat ='<%= appSettings.DateFormat%>';
设置要通过应用使用的全局过滤器
yourModule.filter('myDateFormat', function ($filter) {
return function (input) {
if (input == null) { return ""; }
var formattedDate = $filter('date')(new Date(input), _settingsDateFormat);
return formattedDate;
};
});
Effective {{row.StartDate|myDateFormat}} - {{row.StopDate|myDateFormat}}