[英]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.