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

标签 javascript ios angularjs internet-explorer cross-browser

我创建了以下过滤器来转换 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/

相关文章:

javascript - 动态创建的元素上的事件绑定(bind)?

javascript - Chrome 将 'remove' 元素添加到数组中?

javascript - Onchange 上选择多个

javascript - HTML: JQuery 如何使用JQuery获取data-dk-dropdown-value

ios - 如何让 UIView 在 Interface Builder 中显示其导航 Controller 的导航栏

ios - 如何添加额外的表格 View 单元格来处理用户输入?

javascript - ionic + AngularJS : ng-repeat filter not working on grid layout but works in list

ios - Swift - 如何将 ConstUnsafePointer<()> 转换为 CTRunRef

jquery - 在 AngularJS 中使用同位素 (ng-repeat)

html - 为什么我的 Material AngularJS (CSS) 无法像所提供的演示那样工作?