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

Node.js中如何判断星期几是否处于餐厅设定的营业日期区间内

Node.js 餐厅营业星期判断实现方案

前提约定

JS 内置Date对象的getDay()方法会返回0到6的整数,对应规则为:0=周日、1=周一、2=周二、3=周三、4=周四、5=周五、6=周六。
建议你在DB中直接存储营业起始日、结束日对应该规则的数值,无需额外做映射转换,降低出错概率。如果目前已经存储了星期字符串,可通过如下映射表转换:

const weekDayMap = {
  '周日': 0,
  '周一': 1,
  '周二': 2,
  '周三': 3,
  '周四': 4,
  '周五': 5,
  '周六': 6
};

核心判断函数

该函数同时兼容常规连续营业区间(比如周一到周五)、跨周日的特殊营业区间(比如周四到下周二):

/**
 * 校验日期是否属于餐厅营业星期范围
 * @param {number} startWeekDay 营业起始日(对应getDay返回值)
 * @param {number} endWeekDay 营业结束日(对应getDay返回值)
 * @param {Date} [checkDate=new Date()] 待校验的日期,默认取当前服务器时间
 * @returns {boolean} true=可下单,false=歇业不可下单
 */
function isAllowedOrderDate(startWeekDay, endWeekDay, checkDate = new Date()) {
  const targetWeekDay = checkDate.getDay();
  // 常规区间:起始日序号小于等于结束日,比如周一(1)到周五(5)
  if (startWeekDay <= endWeekDay) {
    return targetWeekDay >= startWeekDay && targetWeekDay <= endWeekDay;
  }
  // 跨周日的区间:比如周五(5)到下周二(2)
  return targetWeekDay >= startWeekDay || targetWeekDay <= endWeekDay;
}

你的场景使用示例

你的需求是周一到周五营业,对应起始值1、结束值5,调用方式如下:

// 从DB取出餐厅营业配置
const restaurantBizConfig = {
  startWeekDay: 1,
  endWeekDay: 5
};

// 校验当前时间是否可下单
const canOrderNow = isAllowedOrderDate(restaurantBizConfig.startWeekDay, restaurantBizConfig.endWeekDay);
if (!canOrderNow) {
  return { code: 400, msg: '餐厅仅周一至周五营业,暂不支持下单' };
}

// 校验用户选择的预约日期是否合规
const userReserveDate = new Date(userSelectedDateStr);
const reserveValid = isAllowedOrderDate(restaurantBizConfig.startWeekDay, restaurantBizConfig.endWeekDay, userReserveDate);

注意事项

  • 时区适配:如果服务器和餐厅所在时区不一致,需先将待校验时间转换为餐厅所在时区的时间,再获取星期值,避免时差导致判断错误,可通过Intl.DateTimeFormat指定时区获取对应星期
  • 额外歇业日期处理:如果有法定节假日、临时闭店等特殊歇业日期,可额外维护一个歇业日期集合(格式统一为YYYY-MM-DD),在校验完星期规则后,追加判断待校验日期的格式化字符串是否在歇业集合中,存在则直接返回不可下单

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:15:02