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

为何new Date().getTime()计算的小时与getHours()结果不一致?

问题原因解析:getTime()与getHours()的时区差异

核心问题出在时间基准的不同:

  • date.getTime()返回的是UTC时区的时间戳(从1970-01-01 00:00:00 UTC到当前时刻的毫秒数),完全不涉及本地时区。
  • date.getHours()返回的是当前Date对象对应的本地时区的小时数,也就是你系统显示的时间。

具体拆解你的例子

当你的系统本地时间是20:00时,说明你的时区比UTC晚3小时(比如UTC-3时区),此时UTC时间是23:00:

  1. 用(date.getTime() / (1000*60*60)) %24计算时,本质是取UTC时间的小时数,所以得到23。
  2. 而date.getHours()会自动转换为本地时区,所以返回正确的20。

如果你非要用getTime()计算本地小时

可以加上时区偏移量修正,注意date.getTimezoneOffset()返回的是UTC与本地时间的分钟差(符号与实际偏移相反):

var date = new Date();
// 先计算UTC小时
var utcHour = Math.floor((date.getTime() / (1000 * 60 * 60)) % 24);
// 转换为时区偏移小时(注意符号处理)
var offsetHours = date.getTimezoneOffset() / 60;
// 计算本地小时,加24再取模避免出现负数
var localHour = (utcHour - offsetHours + 24) % 24;

结论

直接使用getHours()、getMinutes()这类方法是最优解——它们已经封装了时区处理逻辑,既简洁又不会出错,没必要自己通过时间戳硬算。

内容的提问来源于stack exchange,提问作者Osmar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:45:30