[英]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中显示它们。 (为了避免与Laravel的blade语法{{ }}
冲突,我将Angular插值标签更改为[[ ]]
)
[[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 v1.3.3及更高版本中IE的问题已解决。 但是我正在使用v1.5.5 ,但问题仍然存在。 互联网上没有关于iOS浏览器上这种情况的线索。 谁能解释为什么会这样以及如何解决呢?
提前致谢!
我终于找到了问题的原因。 我用过var date = new Date(input);
输入的格式为Ymd H:i:s
,这是MySQL时间戳。
从时间戳创建Date对象时,JavaScript使用Date.parse
。 在许多浏览器的桌面版本中,它们都接受MySQL时间戳来创建Date对象。 但是在iOS和IE中,这不起作用。 若要使用字符串创建日期,则时间戳记应为ISO
格式。 因此,它不接受MySQL时间戳。
为了解决这个问题,我提到了这个问题 ,即在哪里拆分了时间戳,然后将其用于创建日期对象。
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;
};
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.