咨询:已知无时夏令时的亚利桑那州时间JavaScript计算方案
你的方案基本可行,但需要补全边界处理
首先明确:亚利桑那州大部分地区(除纳瓦霍族保留地)确实是固定UTC-7,无夏令时切换,所以直接基于UTC时间计算是完全合理的,不需要依赖用户本地的getTimezoneOffset()——那些提到这个方法的场景,通常是需要在用户本地时区和目标时区之间做转换,但你的需求是直接展示固定偏移的时区时间,和用户本地时区无关,所以没必要引入这个变量。
不过你当前的代码有个问题:当UTC小时数小于7的时候(比如UTC时间是0点),now.getUTCHours() -7会得到负数(比如-7),这显然不是合法的小时值。需要对小时数做取模处理,确保结果在0-23之间。
修正后的代码如下:
const now = new Date(); return { hour: (now.getUTCHours() - 7 + 24) % 24, // 加24再取模避免负数 minute: now.getMinutes(), };
补充说明:
- 使用UTC时间作为基准是最可靠的,因为
new Date()在不同环境下会基于本地时区创建,但getUTCHours()和getUTCMinutes()会返回统一的UTC时间,不受用户本地时区影响。 - 亚利桑那州的固定偏移特性让这个方案成立,如果是有夏令时的时区,才需要考虑用时区数据库(比如
Intl.DateTimeFormat)来自动处理偏移变化,但你的场景完全不需要。
内容的提问来源于stack exchange,提问作者ND_Coder
相关产品推荐
相关产品推荐

