如何修改JavaScript次日配送计时器,显示目标配送日期并跳过周末
实现带工作日过滤的配送日期提示与倒计时功能
需求说明:
需要将网站配送提示从模糊的英文文案改为清晰的中文格式,示例为:想要在12月8日(周四)收到?请在4小时55分内下单,同时满足以下规则:
- 自动计算配送日期,跳过周六和周日
- 配送截止时间为周一至周五的下午2点
修改后的完整代码如下:
JavaScript 代码
function getTimeLeft() { const now = moment(); const deadline = now.clone().hour(14).minute(0).second(0); let deliveryDate; // 中文星期映射表 const weekDays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']; if (now.isAfter(deadline)) { // 已过当日截止时间,从次日开始查找下一个工作日 deliveryDate = now.clone().add(1, 'days'); while (deliveryDate.day() === 0 || deliveryDate.day() === 6) { deliveryDate.add(1, 'days'); } const nextDeadline = deliveryDate.clone().hour(14).minute(0).second(0); const hours = nextDeadline.diff(now, 'hours'); const minutes = nextDeadline.diff(now, 'minutes') % 60; updateDeliveryText(deliveryDate, hours, minutes); } else { // 未过当日截止时间,计算次日起的下一个工作日 deliveryDate = now.clone().add(1, 'days'); while (deliveryDate.day() === 0 || deliveryDate.day() === 6) { deliveryDate.add(1, 'days'); } const hours = deadline.diff(now, 'hours'); const minutes = deadline.diff(now, 'minutes') % 60; updateDeliveryText(deliveryDate, hours, minutes); } } function updateDeliveryText(date, hours, minutes) { const weekDays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']; const formattedDate = `${date.month() + 1}月${date.date()}日(${weekDays[date.day()]})`; document.getElementById("demo3").innerHTML = `想要在<strong>${formattedDate}</strong>收到?请在<strong>${hours}小时${minutes}分</strong>内下单`; } getTimeLeft();
HTML 代码
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment.min.js"></script> <div id="demo3"></div>
核心逻辑说明
- 工作日过滤:通过
moment.day()方法判断日期是否为周末(0为周日,6为周六),循环累加日期直到找到下一个工作日 - 截止时间判断:区分当前时间是否已过当日14点,分别计算对应的送达日期和剩余倒计时
- 日期格式化:自定义中文星期映射,将日期格式化为用户易读的“MM月DD日(周X)”样式
- 文案更新:封装
updateDeliveryText函数统一处理DOM内容渲染,提升代码可维护性
内容的提问来源于stack exchange,提问作者CDCW
相关产品推荐
相关产品推荐

