使用 smalot/bootstrap-datetimepicker 時控制台報錯:
TypeError: (intermediate value).toString(...).split(...)[1] is undefined
// 來源代碼
this.defaultTimeZone = (new Date()).toString().split("(")[1].slice(0, -1);
代碼嘗試通過 Date.toString() 解析時區,但不同瀏覽器返回格式不一致:
"Wed May 25 2016 16:07:14 GMT+0800 (CST)" → 有括號,可解析"Wed May 25 2016 16:07:14 GMT+0800" → 無括號,split("(")[1] 為 undefined使用標準 API getTimezoneOffset() 獲取時區偏移(分鐘),轉換為小時:
// 原代碼
this.defaultTimeZone = (new Date()).toString().split("(")[1].slice(0, -1);
// 修正後
this.defaultTimeZone = 'GMT ' + (new Date()).getTimezoneOffset() / 60;
注意:getTimezoneOffset() 返回值為分鐘,正負號與直覺相反(UTC+8 返回 -480),如需標準格式可進一步處理。
若專案使用 FontAwesome,插件檢測邏輯可能失效:
// 原代碼
this.fontAwesome = k.fontAwesome || this.element.data("font-awesome") || false;
// 修正
this.fontAwesome = true;
修復後插件在 Chrome、Firefox、IE 均正常工作。