如何使用JavaScript的Moment.js计算跳过周日的未来4天?
嘿,这个需求用Moment.js实现起来挺顺手的,我来给你拆解下具体怎么做:
核心思路
我们需要从当前日期开始,逐天往后推进,同时跳过所有周日,直到累计收集到4个有效的非周日日期。这种循环判断的方式能灵活应对当前日期后有多个周日的情况,确保最终拿到准确的4天。
具体代码实现
// 初始化当前日期(基于系统当前时间) let currentDate = moment(); // 记录已找到的有效非周日天数 let validDaysCollected = 0; // 用于存储最终的4个日期 let targetDates = []; while (validDaysCollected < 4) { // 先往后推1天 currentDate = currentDate.add(1, 'day'); // 判断当前日期是否为周日:Moment.js中day()返回0表示周日,1-6对应周一到周六 if (currentDate.day() !== 0) { // 格式化为你需要的日期格式,这里用YYYY-MM-DD示例 targetDates.push(currentDate.format('YYYY-MM-DD')); validDaysCollected++; } } // 输出结果 console.log('跳过周日的后续4天日期:', targetDates);
关键细节说明
- Moment.js的日期可变性:注意
add()方法会直接修改原日期对象,所以这里我们直接将返回值重新赋值给currentDate,确保每次循环都是基于最新的日期推进。 - 星期判断逻辑:
day()方法返回的数值对应星期几,0是周日,这是Moment.js的标准设定,所以判断!== 0就能排除周日。 - 灵活性:不管当前日期后连续遇到几个周日,循环都会自动跳过,直到收集满4个有效日期,比如如果今天是周六,那后面的周日会被跳过,直接取周一、周二、周三、周四这四天。
举个实际例子:假设当前日期是2024-09-15(周日),那循环会先推到周一(16),然后依次收集周一、周二、周三、周四,最终结果就是["2024-09-16", "2024-09-17", "2024-09-18", "2024-09-19"]。
内容的提问来源于stack exchange,提问作者Narayanan S
相关产品推荐
相关产品推荐

