AngularJS日期过滤器可在Chrome上运行,但不适用于Firefox

时间:2015-03-25 17:45:15

标签: angularjs firefox

我有一个网页调用一些PHP api并呈现结果 PHP查询MySQL数据库并返回使用AngularJS指令和过滤器反序列化和格式化的JSON对象。

问题上升,因为AngularJS日期过滤器不直接支持MySql日期 所以我写了这个

angular.module(...)
  .filter('mysqlDateToISO', function() {
        return function(input) {
            input = new Date(input).toISOString();
            return input;
        };
    });

和HTML部分看起来像

<p>
   Pubblicato il 
   {{arg.pubblicato_il | mysqlDateToISO 
                       | date:"dd MMM yyyy 'alle ore' HH:mm:ss"}}
</p>

Chrome可以正确呈现结果:

  

Pubblicato il 2015年3月25日alle ore 16:01:00

Firefox而不是:

  

Pubblicato il {{arg.pubblicato_il | mysqlDateToISO |日期:&#34; dd MMM yyyy   &#39; alle ore&#39; HH:MM:SS&#34;}}

Firefox控制台显示此错误

  

RangeError:无效日期

错误来自input = new Date(input).toISOString()

我该如何解决?

1 个答案:

答案 0 :(得分:2)

您可以使用另一种方法来解析日期字符串,例如Moment:http://momentjs.com/,方法是指定mysql日期字符串格式,然后提供输出格式。

以下是一个例子:

moment("20111031", "YYYYMMDD").format("dd MMM YYYY [alle ore] HH:mm:ss")

用mysql日期格式替换20111031的mysql日期序列化和YYYMMDD。

使用时刻将有助于对浏览器日期实施更加不可知

更完整的例子:

angular.module(...)
  .filter('mysqlDateToISO', function() {
        return function(input) {
            var result = moment(input, "YYYY-MM-DD HH:mm:ss")
                           .format("DD MMMM YYYY [alle ore] HH:mm:ss");
            return result;
        };
    });