为何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:
- 用
(date.getTime() / (1000*60*60)) %24计算时,本质是取UTC时间的小时数,所以得到23。 - 而
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
相关产品推荐
相关产品推荐

