AngularJS日期过滤器firefox / safari问题

时间:2014-11-08 12:38:49

标签: javascript angularjs date

我在使用支持日后缀的自定义过滤器在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

来自herehere的研究建议我需要将ISO时间或时间戳传递到我的Date对象。

我似乎已经通过.getTime()这样做了。我也尝试了.toISOString(),但这甚至都没有在Firefox / Safari中返回任何内容!

有什么想法吗?

2 个答案:

答案 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