【问题标题】:AngularJS Date filter firefox/safari issuesAngularJS 日期过滤器 firefox/safari 问题
【发布时间】:2014-11-08 12:38:49
【问题描述】:

我在使用支持日期后缀的自定义过滤器在 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 中甚至没有返回任何内容!

有什么想法吗?

【问题讨论】:

    标签: javascript angularjs date


    【解决方案1】:

    似乎 Firefox/Safari 没有将 .toISOString() 解析为“正确”格式...

    input = input.replace(/(.+) (.+)/, "$1T$2Z");
    input = new Date(input).getTime();
    

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

    【讨论】:

      【解决方案2】:

      如果您以这种格式传递日期:2021-01-29 12:10:58 safari 将引发错误。

      必须是这种格式:2021-01-29T12:10:58

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-28
        • 2014-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-21
        • 1970-01-01
        • 2014-01-06
        相关资源
        最近更新 更多