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

如何在JSTL的<c:forEach>循环中递增日期字符串?

在JSTL中循环递增日期(MM/dd/yyyy格式)

JSTL没有原生的日期加减标签,我们可以结合<fmt:parseDate>、<fmt:formatDate>和Java的Calendar类来实现需求,以下是完整的解决方案:

实现步骤

  1. 将输入的日期字符串解析为java.util.Date对象
  2. 借助Calendar类处理日期递增逻辑,自动处理月末、年末等边界情况
  3. 循环内先使用当前日期,再执行加1天操作

完整代码示例

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<%-- 初始化传入的日期字符串 --%>
<c:set var="inputDateStr" value="${param.STARTDATE}" />

<%-- 把字符串解析为Date对象,匹配MM/dd/yyyy格式 --%>
<fmt:parseDate var="currentDate" value="${inputDateStr}" pattern="MM/dd/yyyy" />

<%-- 初始化Calendar实例并设置初始日期 --%>
<c:set var="dateCalendar" value="${java.util.Calendar.getInstance()}" />
<c:set var="ignore" value="${dateCalendar.setTime(currentDate)}" />

<c:forEach begin="1" end="7" varStatus="loop">
    <%-- 格式化为MM/dd/yyyy字符串供业务使用 --%>
    <fmt:formatDate var="formattedDate" value="${dateCalendar.time}" pattern="MM/dd/yyyy" />
    
    <%-- 这里写你需要用日期字符串执行的业务逻辑,比如输出或赋值 --%>
    <div>第${loop.count}天:${formattedDate}</div>
    
    <%-- 将日期加1天,自动处理边界情况 --%>
    <c:set var="ignore" value="${dateCalendar.add(java.util.Calendar.DATE, 1)}" />
</c:forEach>

关键细节说明

  • <fmt:parseDate>确保将字符串安全转为Date对象,避免直接操作字符串引发的格式错误
  • Calendar.add()方法会自动处理月末、年末的日期跳转(比如12/31加1天会变为次年1/1)
  • 用ignore变量接收Calendar.setTime()和add()的返回值(这两个方法是void类型),保证EL表达式可以正常执行这些方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 03:15:10