You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何用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);
}

代码说明

  1. 正确创建Date对象:把字符串日期拆分后,用new Date(年, 月-1, 日)的方式创建实例,适配JavaScript中月份从0开始的规则
  2. 日期递增与比较:直接用Date对象做大小比较,每次调用setDate()递增一天,逻辑完全符合日期的先后顺序
  3. 格式化工具函数:封装formatDate函数统一处理日期格式,避免重复编写格式化逻辑

这样运行后就能正确输出从起始日到结束日(包含两端)的所有日期啦~

内容的提问来源于stack exchange,提问作者Venelin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:42:40