AngularJS 日期过滤器适用于 Chrome 但不适用于 Firefox
AngularJS date filter working on Chrome but not on Firefox
我有一个网页调用一些 PHP api 并呈现结果。
PHP 查询 MySQL 数据库和 returns JSON 使用 AngularJS 指令和过滤器反序列化和格式化的对象。
由于 MySql 日期不受 AngularJS 日期过滤器的直接支持,问题出现了。
所以我写了这个
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 25 Mar 2015 alle ore 16:01:00
Firefox 不会:
Pubblicato il {{arg.pubblicato_il | mysqlDateToISO | date:"dd MMM yyyy
'alle ore' HH:mm:ss"}}
Firefox 控制台显示此错误
RangeError: invalid date
错误来自input = new Date(input).toISOString()
我该如何解决?
您可以使用另一种方法来解析日期字符串,例如 Moment : http://momentjs.com/ 通过指定 mysql 日期字符串格式,然后提供输出格式。
这是一个例子:
moment("20111031", "YYYYMMDD").format("dd MMM YYYY [alle ore] HH:mm:ss")
将 20111031 替换为 mysql 日期序列,将 YYYMMDD 替换为 mysql 日期格式。
使用 moment 将有助于更加独立于浏览器日期实现
更完整的示例:
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;
};
});
我有一个网页调用一些 PHP api 并呈现结果。
PHP 查询 MySQL 数据库和 returns JSON 使用 AngularJS 指令和过滤器反序列化和格式化的对象。
由于 MySql 日期不受 AngularJS 日期过滤器的直接支持,问题出现了。
所以我写了这个
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 25 Mar 2015 alle ore 16:01:00
Firefox 不会:
Pubblicato il {{arg.pubblicato_il | mysqlDateToISO | date:"dd MMM yyyy 'alle ore' HH:mm:ss"}}
Firefox 控制台显示此错误
RangeError: invalid date
错误来自input = new Date(input).toISOString()
我该如何解决?
您可以使用另一种方法来解析日期字符串,例如 Moment : http://momentjs.com/ 通过指定 mysql 日期字符串格式,然后提供输出格式。
这是一个例子:
moment("20111031", "YYYYMMDD").format("dd MMM YYYY [alle ore] HH:mm:ss")
将 20111031 替换为 mysql 日期序列,将 YYYMMDD 替换为 mysql 日期格式。
使用 moment 将有助于更加独立于浏览器日期实现
更完整的示例:
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;
};
});