JavaScript跨午夜时间比对失效:如何判断时间在23点到次日6点区间
跨午夜时间区间校验修复方案
原代码问题
- 逻辑运算符使用错误:用
&&同时要求「当前时间≥23点」和「次日时间<6点」,过了午夜后当前时间的分钟数落在0~359区间,不可能满足≥1380(23*60)的条件,因此校验逻辑失效 - 计算次日时间属于冗余逻辑,无需额外引入即可完成判断
修复后代码
const start = 23 * 60 + 0; // 当日23点换算为当日分钟数 const end = 6 * 60 + 0; // 次日6点换算为当日分钟数 const now = new Date(); const currentMinute = now.getHours() * 60 + now.getMinutes(); // 跨午夜区间满足两个条件任意一个即命中 if (currentMinute >= start || currentMinute < end) { return interaction.reply({content: `You cannot do that until 6am.`, ephemeral: true}) }
逻辑说明
跨午夜的[23点, 次日6点)区间,拆分为两段独立的当日区间:
- 当日23点~24点:对应
currentMinute >= start - 当日0点~6点:对应
currentMinute < end
两段满足任意一段即属于目标禁止操作区间,因此改用||或运算符判断即可。
内容的提问来源于stack exchange,提问作者Jake
相关产品推荐
相关产品推荐

