You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何new Date.getTimezoneOffset()返回错误结果?

为何new Date.getTimezoneOffset()返回错误结果?

看起来你遇到的问题有点绕,先帮你理清楚getTimezoneOffset()的逻辑,再分析可能的原因~

首先得明确这个方法的核心规则:它返回的是UTC时间减去本地时间的分钟数,简单翻译成人话就是:

  • 如果你的本地时区是GMT+X,返回值就是 -X*60
  • 如果是GMT-X,返回值就是 X*60

接下来拆解你的例子:
你提到基辅昨天是冬令时GMT+3,今天切换后是GMT+2?这里可能你搞反了欧洲夏令时的规则哦!欧洲大部分地区(包括基辅、巴黎)的夏令时是在3月最后一个周日把时钟拨快1小时——冬令时是GMT+2,夏令时切换后会变成GMT+3。

你用toLocaleString验证的基辅时间是31/03/2024, 10:07:28,伦敦时间是08:07:07,两者相差2小时——这其实是对的:3月31日伦敦也同步切换到了夏令时(GMT+1),基辅此时是GMT+3,刚好差2小时。这时候getTimezoneOffset()返回-180(也就是-3*60)是完全正确的,因为本地时间比UTC早3小时,UTC = 本地时间 - 3小时,所以UTC减去本地时间的结果就是-180分钟。

你误以为应该返回-120,其实是把冬夏令时的偏移搞反啦!

再看你切换到巴黎的情况:巴黎夏令时切换后是GMT+2,所以getTimezoneOffset()返回-120(-2*60)是正确的,你预期的-60是冬令时的偏移,但3月31日巴黎已经进入夏令时了,所以是你的预期出现了偏差~

当然,如果排除了认知偏差后还是出现异常,那可能是以下技术原因:

  • 系统时区数据未更新:你的操作系统时区数据库可能没同步到最新的夏令时规则,导致JS读取的时区信息有误。可以尝试更新系统时区数据,或者重启设备试试。
  • JS引擎时区库滞后:不同浏览器或Node.js版本使用的IANA时区数据库版本不同,如果版本较旧,可能没包含最新的时区调整(比如某些地区夏令时规则变更),可以尝试升级浏览器或Node.js版本。
  • 缓存或进程问题:如果是浏览器环境,可能页面缓存了旧的时区信息,试试清空缓存或打开隐私窗口;如果是Node.js,重启进程让时区设置生效。

备注:内容来源于stack exchange,提问作者Yevgen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 12:49:36