2018年12月23日 星期日

時區問題(by browser)

這次的專案跨了兩個以上的時區
以哪一個國家做基準時間都不合適
解決之道就是.....在資料庫資料的create & modify 時間用System.DateTime.UtcNow取代System.DateTime.Now,
那怎麼在客戶端讓不同時區的人看到「應該」呈現的時間呢?
這時就要靠「Date.getTimezoneOffset」函數了
參考以下的機制
-----------------------------------------------
renderer: function (value, metaData, record, row, col, store, gridView) {
                                        //return Ext.util.Format.date(value, 'Y/m/d h:i:s A');
                                        if (value == null) return "";
                                        let adjDate = Ext.Date.add(new Date(value), Ext.Date.MINUTE, new Date().getTimezoneOffset() * -1);
                                        return Ext.util.Format.date(adjDate, 'd/m/Y h:i:s A');

                                    }
=============================================
 其中的「new Date().getTimezoneOffset()」在我國(台灣)顯示的是-480,也就是我這裡的時間減掉480分鐘就是UTC時間,所以要用-1乘上去加回來(這時候,ExtJs的Date函數就很好用了)
把UTC時間加上getTimezoneOffset就會得到瀏覽器的時區時間了

那瀏覽器的時區什麼時候決定的?實驗(用firefox)的結果是打開時決定的,所以你要執行這函數前一刻改系統時間是看不出效果的

 以上,一起加油吧