求助:如何用JavaScript在两个日期之间循环并输出所有日期?
解决两个日期之间所有日期的输出问题
嘿,我注意到你在尝试用JavaScript输出两个日期之间的所有日期,你的现有代码存在几个关键问题导致它无法正常运行,我来帮你梳理并修正:
原代码的核心问题
- 你把字符串格式的日期
dString直接赋值给循环变量d,但字符串没有setDate()、getDate()这些Date对象的方法,运行时会直接抛出错误 - 用
"dd.mm.yyyy"格式的字符串做大小比较是不可靠的,字符串比较是按字符顺序逐位对比,和日期的实际先后逻辑不匹配
修正后的完整代码
// 起始日期字符串 var dString = "18.04.2018"; // 拆分日期部分 var dParts = dString.split('.'); // 转换为标准Date对象(注意JS中月份是0索引,所以要减1) var startDate = new Date(dParts[2], dParts[1] - 1, dParts[0]); // 计算结束日期:起始日加10天(和你原代码的逻辑保持一致) var endDate = new Date(startDate); endDate.setDate(startDate.getDate() + 10); // 封装日期格式化工具函数,转成dd.mm.yyyy格式 function formatDate(date) { const day = String(date.getDate()).padStart(2, '0'); const month = String(date.getMonth() + 1).padStart(2, '0'); const year = date.getFullYear(); return `${day}.${month}.${year}`; } // 输出起始与结束日期 console.log(`Now: ${formatDate(startDate)} EndDate: ${formatDate(endDate)}`); // 循环输出所有中间日期 var currentDate = new Date(startDate); while (currentDate <= endDate) { console.log(`Day: ${formatDate(currentDate)}`); // 每次递增一天 currentDate.setDate(currentDate.getDate() + 1); }
代码说明
- 正确创建Date对象:把字符串日期拆分后,用
new Date(年, 月-1, 日)的方式创建实例,适配JavaScript中月份从0开始的规则 - 日期递增与比较:直接用Date对象做大小比较,每次调用
setDate()递增一天,逻辑完全符合日期的先后顺序 - 格式化工具函数:封装
formatDate函数统一处理日期格式,避免重复编写格式化逻辑
这样运行后就能正确输出从起始日到结束日(包含两端)的所有日期啦~
内容的提问来源于stack exchange,提问作者Venelin
相关产品推荐
相关产品推荐

