如何用JavaScript判断当前日期是否晚于本周周二18点?
解决着陆页内容权限控制:仅本周周二18点后开放
核心实现思路
直接计算本周周二18:00:00的时间戳,将当前时间与该时间戳对比:如果当前时间更大,就开放内容权限。这种方式天然解决跨月问题,同时精确到时分秒。
完整代码示例
// 获取当前时间(测试时可替换为指定时间,比如new Date("2022-11-03 16:20:04")) const currentTime = new Date(); // 计算本周周二的日期 const dayOfWeek = currentTime.getDay(); // 0=周日, 1=周一, 2=周二, ..., 6=周六 // 计算调整到本周周二的天数差 const daysAdjustment = dayOfWeek === 0 ? 2 // 周日到周二需加2天 : dayOfWeek <= 2 ? (2 - dayOfWeek) // 周一加1天,周二加0天 : -(dayOfWeek - 2); // 周三到周六,减去已过天数回到本周周二 // 创建本周周二的日期对象 const tuesdayThisWeek = new Date(currentTime); tuesdayThisWeek.setDate(currentTime.getDate() + daysAdjustment); // 固定时间为18:00:00 tuesdayThisWeek.setHours(18, 0, 0, 0); // 判断是否满足开放条件 const canShowRestrictedContent = currentTime > tuesdayThisWeek; // 测试输出 console.log("本周周二18点时间:", tuesdayThisWeek); console.log("是否可展示内容:", canShowRestrictedContent);
代码说明
- 跨月自动处理:
setDate()方法会自动适配月份变化(比如10月31日加1天会自动转为11月1日),无需手动计算月份边界。 - 精确时间校验:通过
setHours(18, 0, 0, 0)将周二的时间固定到下午6点,确保只有18点之后才开放内容。 - 全场景覆盖:
- 周日/周一:自动计算到本周周二的日期
- 周二:直接校验是否过了18点
- 周三到周六:回到本周周二的日期,此时当前时间必然晚于周二18点,返回
true
原代码的问题分析
- 原日期对象被篡改:
today.setDate(first + 1)会直接修改today本身,后续创建wednesday等对象时,都是基于修改后的today,导致日期计算混乱。 - 缺失时间维度校验:只对比日期,没有设置具体时间点,会导致周二18点前就错误开放内容。
- 天数差计算冗余:无需计算天数差,直接对比时间戳是更准确、高效的判断方式。
内容的提问来源于stack exchange,提问作者designmode
相关产品推荐
相关产品推荐

