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

为营业时间脚本添加日期例外规则的技术求助

问题排查与修复:营业时间例外日期逻辑失效

问题根源

你当前的代码错误地用getDay()比较星期几,而非具体的日期。比如2022-10-17是周一,那所有周一都会触发例外逻辑,而不是只有10月17号当天。这就是例外日期逻辑不生效的核心原因。

修复方案

需要直接比较具体日期,同时处理Date对象的时区/时间部分干扰,确保只对比年月日:

修改后的代码

// 获取当前日期并格式化为YYYY-MM-DD字符串(去除时分秒)
const formatDate = (date) => {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  return `${year}-${month}-${day}`;
};

const today = new Date();
const todayStr = formatDate(today);

// 每周营业时间(getDay()返回0=周日,1=周一,数组索引直接对应)
const hours = [
  'Sunday hours', 
  'Monday hours', 
  'Tuesday hours', 
  'Wednesday hours', 
  'Thursday hours', 
  'Friday hours', 
  'Saturday hours'
];
const exceptionText = 'Special day';

// 例外日期数组(直接存YYYY-MM-DD格式字符串,直观且避免时区问题)
const exceptionDates = [
  '2022-10-17',
  '2022-12-26',
  '2023-01-02'
];

// 判断逻辑
const openingHoursEl = document.getElementById("openinghours");
if (exceptionDates.includes(todayStr)) {
  openingHoursEl.innerHTML = exceptionText;
} else {
  openingHoursEl.innerHTML = hours[today.getDay()];
}
<div id="openinghours"></div>

关键说明

  • formatDate函数:将Date对象转为YYYY-MM-DD格式字符串,避免时区或时分秒导致的日期匹配错误。
  • 例外日期用字符串存储:相比创建Date对象更简单直观,彻底规避时区差异问题。
  • 营业时间数组调整:原代码中n-1在周日(getDay()返回0)时会取到数组最后一项,现在调整数组顺序,让getDay()的返回值直接对应数组索引,逻辑更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:25:28