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 |
浏览器兼容性
加载中…