簡體   English   中英

AngularJS自定義過濾器無法在iOS和IE上運行

[英]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以外的桌面瀏覽器上工作

在IE以外的桌面瀏覽器上的工作示例

在iOS瀏覽器和IE上不起作用。 而是顯示原始角度代碼。

在iOS瀏覽器上不起作用

重要事項

在搜索時,我發現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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM