Date.prototype.getTimezoneOffset()
getTimezoneOffset() 方法用於 Date 物件,用於返回該日期在 UTC 時間和本地時間之間的差值(以分鐘為單位)。
試一試
const date1 = new Date("August 19, 1975 23:15:30 GMT+07:00");
const date2 = new Date("August 19, 1975 23:15:30 GMT-02:00");
console.log(date1.getTimezoneOffset());
// Expected output: your local timezone offset in minutes
// (e.g., -120). NOT the timezone offset of the date object.
console.log(date1.getTimezoneOffset() === date2.getTimezoneOffset());
// Expected output: true
語法
getTimezoneOffset()
引數
無。
返回值
返回一個數字,表示日期在 UTC 時間和本地時間之間的差值(以分鐘為單位)。實際的本地時間演算法是實現定義的,在沒有適當資料的執行時中,返回值可以為零。如果日期 無效,則返回 NaN。
描述
date.getTimezoneOffset() 返回 date 在 UTC 時間和本地時間(即主機系統的時區,如果在瀏覽器中執行則為主機系統的時區,否則為 JavaScript 執行時(例如 Node.js 環境)的主機系統時區)之間的差值(以分鐘為單位)。
負值和正值
getTimezoneOffset() 返回的分鐘數,如果本地時區落後於 UTC,則為正值;如果本地時區領先於 UTC,則為負值。例如,對於 UTC+10,將返回 -600。
| 當前時區 | 返回值 |
|---|---|
| UTC-8 | 480 |
| UTC | 0 |
| UTC+3 | -180 |
夏令時 (DST) 地區的差異結果
在每年會根據夏令時 (DST) 進行時間調整的地區,隨著 date 的變化,呼叫 getTimezoneOffset() 返回的分鐘數可能會不一致。
注意: getTimezoneOffset() 的行為永遠不會因程式碼執行的時間而異——在同一地區執行的行為始終是一致的。只有 date 的值會影響結果。
注意: 許多國家曾嘗試過一年不兩次更改時間,這意味著 DST 會持續到冬季。例如,在英國,DST 從 1968 年 2 月 18 日凌晨 2:00 開始,到 1971 年 10 月 31 日凌晨 3:00 結束,因此在冬季時鐘沒有撥回。
在大多數實現中,會使用 IANA 時區資料庫 (tzdata) 來精確確定 date 時刻本地時區的偏移量。但是,如果此類資訊不可用,實現可能會返回零。
示例
使用 getTimezoneOffset()
// Create a Date instance for the current time
const currentLocalDate = new Date();
// Create a Date instance for 03:24 GMT-0200 on May 1st in 2016
const laborDay2016at0324GMTminus2 = new Date("2016-05-01T03:24:00-02:00");
currentLocalDate.getTimezoneOffset() ===
laborDay2016at0324GMTminus2.getTimezoneOffset();
// true, always, in any timezone that doesn't annually shift in and out of DST
// false, sometimes, in any timezone that annually shifts in and out of DST
getTimezoneOffset() 和 DST
在使用 DST 的地區,返回值可能會根據 date 所在的時間年份而變化。以下是在紐約(時區為 UTC-05:00)的執行時輸出:
const nyOffsetSummer = new Date("2022-02-01").getTimezoneOffset(); // 300
const nyOffsetWinter = new Date("2022-08-01").getTimezoneOffset(); // 240
getTimezoneOffset() 和歷史資料
由於歷史原因,一個地區所在時區可能會不斷變化,即使不考慮 DST。例如,以下是上海(時區為 UTC+08:00)的執行時輸出:
const shModernOffset = new Date("2022-01-27").getTimezoneOffset(); // -480
const shHistoricalOffset = new Date("1943-01-27").getTimezoneOffset(); // -540
這是因為在 第二次中日戰爭期間,當上海處於日本控制下時,時區被改為 UTC+09:00 以與日本保持一致(實際上是“全年 DST”),這被記錄在 IANA 資料庫中。
規範
| 規範 |
|---|
| ECMAScript® 2026 語言規範 # sec-date.prototype.gettimezoneoffset |
瀏覽器相容性
載入中…