Date.prototype.getTimezoneOffset()

基线 广泛可用

此功能非常成熟,可以在许多设备和浏览器版本上运行。它从以下时间起在所有浏览器中都可用 2015 年 7 月.

getTimezoneOffset() 方法是 Date 实例的方法,返回此日期在 UTC 时区中的评估值与在本地时区中的评估值之间的差异(以分钟为单位)。

试一试

语法

js
getTimezoneOffset()

参数

无。

返回值

一个数字,表示日期在 UTC 时区中的评估值与在本地时区中的评估值之间的差异(以分钟为单位)。实际的本地时间算法是实现定义的,返回值在没有适当数据的运行时可能为零。如果日期是 无效的,则返回 NaN

描述

date.getTimezoneOffset() 返回 date 在 UTC 时区中的评估值与在本地时区中的评估值之间的差异(以分钟为单位)——也就是说,浏览器使用主机的时区(如果代码从 Web 中的浏览器运行),或者在代码执行的任何 JavaScript 运行时(例如 Node.js 环境)的主机系统中(如果代码从 Web 中的浏览器运行)。

负值和正值

getTimezoneOffset() 返回的分钟数如果本地时区落后于 UTC 则为正数,如果本地时区领先于 UTC 则为负数。例如,对于 UTC+10,将返回 -600

当前时区 返回值
UTC-8 480
UTC 0
UTC+3 -180

夏令时 (DST) 区域的结果可能不同

在一个每年进入和退出夏令时 (DST) 的区域中,随着 date 的变化,调用 getTimezoneOffset() 返回的分钟数可能不一致。

注意:getTimezoneOffset() 的行为永远不会根据运行代码的时间而改变——在同一个区域运行时,它的行为始终保持一致。只有 date 的值会影响结果。

注意:许多国家已经尝试过一年中不更改两次时间,这意味着夏令时也持续到了冬季。例如,在英国,夏令时从 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() 和夏令时

在使用夏令时的区域中,返回值可能会根据 date 所处的年份而改变。以下是运行时在纽约的输出,纽约的时区是 UTC-05:00。

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

getTimezoneOffset() 和历史数据

由于历史原因,一个区域所在的时区可能会不断变化,即使不考虑夏令时也是如此。例如,以下是运行时在上海的输出,上海的时区是 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 以与日本保持一致(实际上是“全年夏令时”),这在 IANA 数据库中记录了下来。

规范

规范
ECMAScript 语言规范
# sec-date.prototype.gettimezoneoffset

浏览器兼容性

BCD 表只在启用 JavaScript 的浏览器中加载。

另请参阅