我在使用支持日后缀的自定义过滤器在Firefox和Safari中正确显示日期时遇到问题。我以以下格式获得UTC日期:
yyyy-mm-dd hh-mm-ss
然后我有一个自定义DateFilter
,用后缀替换oo
,即2nd
:
var suffixes = ["th", "st", "nd", "rd"];
return function(input, format) {
input = new Date(input).getTime();
var dtfilter = $filter('date')(input, format);
var day = parseInt($filter('date')(input, 'dd'));
var relevantDigits = (day < 30) ? day % 20 : day % 30;
var suffix = (relevantDigits <= 3) ? suffixes[relevantDigits] : suffixes[0];
return dtfilter.replace('oo', suffix);
};
这适用于Chrome,我将以下内容传递到我的模板中,并获得预期日期:
{{ date.date_utc | DateFilter:'EEEE MMMM doo yyyy' | uppercase }}
=
SATURDAY NOVEMBER 1ST 2014
在Firefox / Safari上,它返回为:
UNDEFINED UNDEFINED NANTH 0NAN
来自here和here的研究建议我需要将ISO时间或时间戳传递到我的Date
对象。
我似乎已经通过.getTime()
这样做了。我也尝试了.toISOString()
,但这甚至都没有在Firefox / Safari中返回任何内容!
有什么想法吗?
答案 0 :(得分:10)
似乎Firefox / Safari没有将.toISOString()
解析为'正确'格式......
input = input.replace(/(.+) (.+)/, "$1T$2Z");
input = new Date(input).getTime();
现在将其解析为正确的ISO格式,然后成功解析。
答案 1 :(得分:0)
如果您以这种格式传递日期:2021-01-29 12:10:58
safari 将引发错误。
它必须是这种格式:2021-01-29T12:10:58