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

浏览器兼容性

另见