【发布时间】:2016-11-24 14:11:05
【问题描述】:
我创建了以下过滤器来转换 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 的刀片语法 {{ }} 冲突)
[[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。而是显示原始角度代码。
重要:
我在搜索的时候发现IE的问题在Angular v1.3.3及以上版本中解决了。但是我使用的是 v1.5.5,但问题仍然存在。对于 iOS 浏览器上的这种情况,互联网上没有任何线索。谁能解释为什么会发生这种情况以及如何解决这个问题?
提前致谢!
【问题讨论】:
-
开发工具中浏览器登录到控制台的内容是什么?
-
RangeError: Number expected在上述过滤器中的匿名函数内,靠近return date.toISOString(); -
根据 MSDN:“如果 objDate 不包含有效日期,则会引发 RangeError 异常 [当调用 toISOString()]。”。也许您可以检查 offset、date.getTime() 的值以及传递给 setTime 函数的整个值?
-
那是不可能的。值有效。那么它如何在 chrome 上运行良好?同一页面在台式机上的 Chrome 上运行完美。问题来自 IE 和 iOS 浏览器。我刚刚读到 IE 在早期版本中不支持 toISOString() 方法。可能就是这个原因。
标签: javascript ios angularjs internet-explorer cross-browser