Date.prototype.getTimezoneOffset()

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

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

語法

js
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()

js
// 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)的執行時輸出:

js
const nyOffsetSummer = new Date("2022-02-01").getTimezoneOffset(); // 300
const nyOffsetWinter = new Date("2022-08-01").getTimezoneOffset(); // 240

getTimezoneOffset() 和歷史資料

由於歷史原因,一個地區所在時區可能會不斷變化,即使不考慮 DST。例如,以下是上海(時區為 UTC+08:00)的執行時輸出:

js
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

瀏覽器相容性

另見