如何修改呼叫中心JS营业时间校验代码使其支持节假日判断?
修改方案
实现逻辑
要适配节假日判断,只需提前维护所在地区的法定节假日列表,在原有工作时段判断逻辑前新增节假日校验规则:只要当前日期属于节假日,直接判定为非工作时段。如果存在周末补班的场景,也可以额外增加补班日期列表做反向适配。
修改后完整代码
exports.handler = async function(context, event, callback) { const moment = require('moment-timezone'); var now = moment().tz('America/New_York'); console.log('Current time-->'+now); console.log('current hours-->'+now.hour()); let isWorkingHours = false; //let isWorkingHours = true; // 测试用开关 // 配置美国纽约地区法定节假日,格式为YYYY-MM-DD,每年按需更新即可 const holidays = [ '2024-01-01', // 新年 '2024-01-15', // 马丁路德金日 '2024-02-19', // 总统日 '2024-05-27', // 阵亡将士纪念日 '2024-07-04', // 独立日 '2024-09-02', // 劳动节 '2024-10-14', // 哥伦布日 '2024-11-11', // 退伍军人节 '2024-11-28', // 感恩节 '2024-12-25' // 圣诞节 ]; // 可选:配置补班工作日(原本是周末但需要上班的日期) const extraWorkDays = [ // 示例:'2024-12-26' ]; const todayStr = now.format('YYYY-MM-DD'); const weekday = now.isoWeekday(); console.log('weekday-->'+weekday); // 判断逻辑:不是节假日 + (是工作日 或 是补班日)+ 9点到17点之间 if ( !holidays.includes(todayStr) && (weekday <= 5 || extraWorkDays.includes(todayStr)) && now.hour() >= 9 && now.hour() <= 17 ) { //if (now.hour() >= 4 && now.hour() <= 20 && weekday <= 2) { // 测试用规则 isWorkingHours = true; } callback(null, { isWorkingHours: isWorkingHours }); }
改动说明
- 新增了节假日配置数组,你可以根据运营地区的官方放假安排每年更新数组内的日期即可,无需修改核心判断逻辑
- 新增了节假日校验规则,只要当前日期属于配置的节假日列表,就算是周一到周五的工作时段也会判定为非工作时间
- 额外增加了补班日适配逻辑,遇到需要周末上班的特殊场景,只需要把对应日期加入
extraWorkDays数组即可生效
内容的提问来源于stack exchange,提问作者César Castor
相关产品推荐
相关产品推荐

