现代JavaScript中如何更简便地获取指定时区的当前小时数?
获取指定时区当前小时数的简化实现
需求明确:
- 获取「Europe/London」时区的当前小时数(如时间为13:45时返回13)
- 不受用户本地时区影响
- 仅兼容现代浏览器,不支持该时区时通过try/catch捕获异常(渐进式增强)
你当前的实现代码:
const timeZone = "Europe/London" const dateTimeFormat = new Intl.DateTimeFormat("en-GB", { timeZone, hour: "numeric" }) const hour = parseInt(dateTimeFormat.formatToParts(new Date)[0].value, 10)
更简便的写法
可以直接使用Date.prototype.toLocaleTimeString,无需借助formatToParts提取数据,逻辑更直观:
const timeZone = "Europe/London"; try { const hour = Number(new Date().toLocaleTimeString('en-GB', { timeZone, hour: '2-digit', hour12: false // 强制24小时制,避免12小时制格式干扰转数字 })); // 此处可使用hour变量,比如输出或后续逻辑 } catch (e) { // 浏览器不支持该时区时,按需求忽略异常 }
写法优势
- 更简洁直观:直接通过
toLocaleTimeString指定时区和小时格式,拿到小时字符串后转数字,省去了创建Intl.DateTimeFormat实例和提取数组元素的步骤 - 更可靠:添加
hour12: false确保返回的是24小时制的纯数字字符串(比如"13"而非"1 PM"),避免解析错误 - 符合渐进式增强:用try/catch包裹核心逻辑,不支持指定时区的浏览器会自动跳过,不影响基础功能
内容的提问来源于stack exchange,提问作者Henrik N
相关产品推荐
相关产品推荐

