Date.prototype.getTimezoneOffset()
getTimezoneOffset()
方法是 Date
实例的方法,返回此日期在 UTC 时区中的评估值与在本地时区中的评估值之间的差异(以分钟为单位)。
试一试
语法
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()
// 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。
const nyOffsetSummer = new Date("2022-02-01").getTimezoneOffset(); // 300
const nyOffsetWinter = new Date("2022-08-01").getTimezoneOffset(); // 240
getTimezoneOffset() 和历史数据
由于历史原因,一个区域所在的时区可能会不断变化,即使不考虑夏令时也是如此。例如,以下是运行时在上海的输出,上海的时区是 UTC+08:00。
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 的浏览器中加载。