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

原生JS不依赖第三方库判断指定时区当前时间是否在工作时段

问题说明

需要在不引入momentJS等外部时间库的前提下,判断当前时间是否处于业务代表的工作时段内,代码需要支持在不同AWS区域部署时正常运行,不受部署节点本地时区影响。

现有已实现代码
localTimeZone = 'America/New_York';
localWorkingHours = [
  {day: 'Sunday', from: '08:00', to: '14:00'},
  {day: 'Sunday', from: '23:00', to: '23:59'},
  {day: 'Monday', from: '00:00', to: '07:00'},
  {day: 'Tuesday', from: '08:00', to: '16:00'},
  {day: 'Wednesday', from: '08:00', to: '16:00'}
];

const now = new Date();
const currentDayInWeek = now.toLocaleString("en-US", {
    timeZone: localTimeZone,
    weekday: 'long'
});
const workingTimes = localWorkingHours.filter(times => times.day === currentDayInWeek);
// 待实现:校验当前时间是否落在当日工作时段区间内
实现方案

不用引入任何第三方库,直接用JS原生的Intl能力就能实现,核心是所有时间解析都显式指定目标时区,彻底绕开运行环境的本地时区影响,把时间统一转成当日0点开始的累计分钟数做数值比较即可,跨AWS区域运行完全不会出问题。

完整实现代码

// 工具方法:将HH:MM格式的时间转为当日0点起的累计分钟数
const convertTimeToMinutes = (timeStr) => {
  const [hour, minute] = timeStr.split(':').map(Number);
  return hour * 60 + minute;
};

// 显式指定目标时区,获取当前时区下的24小时制时、分值
const [currentHour, currentMinute] = now.toLocaleString("en-US", {
  timeZone: localTimeZone,
  hour: '2-digit',
  minute: '2-digit',
  hour12: false // 强制关闭12小时制,避免AM/PM导致解析错误
}).split(':').map(Number);
const currentTotalMinutes = currentHour * 60 + currentMinute;

// 只要匹配任意一个当日工作时段,即处于工作时间
const isInWorkingHours = workingTimes.some(period => {
  const startMinutes = convertTimeToMinutes(period.from);
  const endMinutes = convertTimeToMinutes(period.to);
  return currentTotalMinutes >= startMinutes && currentTotalMinutes <= endMinutes;
});

注意事项

  • 禁止使用getHours()、getMinutes()等直接获取Date对象时间分量的方法,这类方法返回的是运行环境本地时区的时间,跨区域部署会出现判断错误
  • 配置工作时段时如果涉及跨天区间,统一拆分到两个日期的配置项中即可(比如周日23点到周一7点拆成周日23:00-23:59、周一00:00-07:00),不需要额外写跨天判断逻辑
  • 传入的时区参数必须是标准IANA时区名称,不要传时区缩写(比如不要传EST,要传America/New_York),避免时区解析歧义
  • 该方案依赖JS标准内置API,所有Node.js LTS版本均原生支持,无额外兼容问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:51:24