AngularJS 自定义过滤器不适用于 iOS 和 IE
AngularJS custom filter not working on iOS and IE
我创建了以下过滤器来转换 MySQL 日期并根据 UTC 调整时区时间。
angular.module('HIS')
.filter('dateToISO', function () {
return function (input) {
var offset = new Date().getTimezoneOffset();
var date = new Date(input);
date.setTime(date.getTime()-offset*60000);
return date.toISOString();
};
});
然后,我使用过滤器将日期转换为我喜欢的格式并在 HTML 中显示它们,如下所示。 (我已将 Angular 插值标记更改为 [[ ]]
以避免与 Laravel 的 blade 语法冲突 {{ }}
)
[[prescription.patient.first_name]] [[prescription.patient.last_name]]<br>
[[prescription.created_at | dateToISO | date:"EEEE, d/M/yy h:mm a"]]
除 IE 外,这适用于所有桌面浏览器。此外,这不适用于 iOS(Safari/Chrome).
中的 浏览器
在除 IE 之外的桌面浏览器上工作
不适用于 iOS 浏览器和 IE。而是显示原始 angular 代码。
重要:
我搜索的时候发现IE的问题在Angularv1.3.3及以上版本已经解决了。但是 我使用的是 v1.5.5,但问题仍然存在。在 iOS 浏览器上,Internet 上没有关于这种情况的线索。谁能解释为什么会这样以及如何解决这个问题?
提前致谢!
我终于找到问题的原因了。我使用了 var date = new Date(input);
,其中输入的格式为 Y-m-d H:i:s
,这是一个 MySQL 时间戳。
JavaScript 从时间戳创建日期对象时使用 Date.parse
。在许多浏览器的桌面版本中,它们接受 MySQL 时间戳来创建 Date 对象。但是在 iOS 和 IE 中,这是行不通的。对于使用字符串创建的日期,时间戳应采用 ISO
格式。因此,它不接受 MySQL 时间戳。
为了解决这个问题,我参考了 this question 时间戳被拆分然后用于创建日期对象的地方。
angular.module('HIS')
.filter('dateToISO', function () {
return function (input) {
var t = input.split(/[- :]/);
var date = new Date(Date.UTC(t[0], t[1]-1, t[2], t[3], t[4], t[5]));
return date;
};
});
我创建了以下过滤器来转换 MySQL 日期并根据 UTC 调整时区时间。
angular.module('HIS')
.filter('dateToISO', function () {
return function (input) {
var offset = new Date().getTimezoneOffset();
var date = new Date(input);
date.setTime(date.getTime()-offset*60000);
return date.toISOString();
};
});
然后,我使用过滤器将日期转换为我喜欢的格式并在 HTML 中显示它们,如下所示。 (我已将 Angular 插值标记更改为 [[ ]]
以避免与 Laravel 的 blade 语法冲突 {{ }}
)
[[prescription.patient.first_name]] [[prescription.patient.last_name]]<br>
[[prescription.created_at | dateToISO | date:"EEEE, d/M/yy h:mm a"]]
除 IE 外,这适用于所有桌面浏览器。此外,这不适用于 iOS(Safari/Chrome).
中的 浏览器在除 IE 之外的桌面浏览器上工作
不适用于 iOS 浏览器和 IE。而是显示原始 angular 代码。
重要:
我搜索的时候发现IE的问题在Angularv1.3.3及以上版本已经解决了。但是 我使用的是 v1.5.5,但问题仍然存在。在 iOS 浏览器上,Internet 上没有关于这种情况的线索。谁能解释为什么会这样以及如何解决这个问题?
提前致谢!
我终于找到问题的原因了。我使用了 var date = new Date(input);
,其中输入的格式为 Y-m-d H:i:s
,这是一个 MySQL 时间戳。
JavaScript 从时间戳创建日期对象时使用 Date.parse
。在许多浏览器的桌面版本中,它们接受 MySQL 时间戳来创建 Date 对象。但是在 iOS 和 IE 中,这是行不通的。对于使用字符串创建的日期,时间戳应采用 ISO
格式。因此,它不接受 MySQL 时间戳。
为了解决这个问题,我参考了 this question 时间戳被拆分然后用于创建日期对象的地方。
angular.module('HIS')
.filter('dateToISO', function () {
return function (input) {
var t = input.split(/[- :]/);
var date = new Date(Date.UTC(t[0], t[1]-1, t[2], t[3], t[4], t[5]));
return date;
};
});