gpt4 book ai didi

javascript - AngularJS 自定义过滤器不适用于 iOS 和 IE

转载 作者:行者123 更新时间:2023-11-28 19:36:21 25 4
gpt4 key购买 nike

我创建了以下过滤器来转换 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 之外的桌面浏览器上工作

Working example on desktop browsers except IE

不适用于 iOS 浏览器和 IE。显示的是原始 Angular 代码。

Not working on iOS browsers

重要:

我搜索的时候发现IE的问题在Angular v1.3.3及以上版本已经解决了。但是我使用的是 v1.5.5,问题仍然存在。 iOS 浏览器出现这种情况,网上没有任何线索。任何人都可以解释为什么会发生这种情况以及如何解决这个问题吗?

提前致谢!

最佳答案

我终于找到问题的原因了。我使用了 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;
};
});

关于javascript - AngularJS 自定义过滤器不适用于 iOS 和 IE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38496521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com