AngularJS日期过滤器firefox/safari问题

Ali*_*ias 4 javascript date angularjs

我在使用支持日后缀的自定义过滤器在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);
};
Run Code Online (Sandbox Code Playgroud)

这适用于Chrome,我将以下内容传递到我的模板中,并获得预期日期:

{{ date.date_utc | DateFilter:'EEEE MMMM doo yyyy' | uppercase }} = SATURDAY NOVEMBER 1ST 2014

在Firefox/Safari上,它返回为:

UNDEFINED UNDEFINED NANTH 0NAN

这里这里开始研究表明我需要将ISO时间或时间戳传递到我的Date对象中.

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

有任何想法吗?

Ali*_*ias 10

似乎Firefox/Safari没有解析.toISOString()成'正确'的格式......

input = input.replace(/(.+) (.+)/, "$1T$2Z");
input = new Date(input).getTime();
Run Code Online (Sandbox Code Playgroud)

现在,它将其解析为正确的ISO格式,然后成功解析.