Contents
see List작성일 2016. 01. 14.
JSTL 현재날짜 기준 연산
JSTL(JSP Standard Tag Library)에서 현재 날짜를 기준으로 날짜 연산을 수행하는 방법입니다. 날짜 비교, 포맷팅, D-Day 계산 등에 활용됩니다.
언제 사용하나요?
- 이벤트 종료일까지 남은 일수 표시
- 새 게시물 표시 (24시간 이내)
- 마감일 경과 여부 확인
- 날짜별 조건부 렌더링
현재 날짜 가져오기
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!-- 현재 날짜 -->
<jsp:useBean id="now" class="java.util.Date" />
<!-- 포맷팅 출력 -->
<fmt:formatDate value="${now}" pattern="yyyy-MM-dd" />
<fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss" />
<fmt:formatDate value="${now}" pattern="yyyy년 MM월 dd일" />
날짜 비교
<!-- 밀리초로 변환하여 비교 -->
<jsp:useBean id="now" class="java.util.Date" />
<!-- 이벤트 종료일이 지났는지 확인 -->
<c:choose>
<c:when test="${event.endDate.time > now.time}">
<span class="ongoing">진행중</span>
</c:when>
<c:otherwise>
<span class="ended">종료됨</span>
</c:otherwise>
</c:choose>
<!-- 24시간 이내 게시물인지 확인 -->
<c:set var="oneDayMillis" value="${24 * 60 * 60 * 1000}" />
<c:if test="${now.time - post.regDate.time < oneDayMillis}">
<span class="new-badge">NEW</span>
</c:if>
D-Day 계산
<!-- 남은 일수 계산 -->
<jsp:useBean id="now" class="java.util.Date" />
<c:set var="oneDayMillis" value="${24 * 60 * 60 * 1000}" />
<c:set var="diffMillis" value="${event.endDate.time - now.time}" />
<c:set var="daysLeft" value="${diffMillis / oneDayMillis}" />
<c:choose>
<c:when test="${daysLeft > 0}">
D-<fmt:formatNumber value="${daysLeft}" maxFractionDigits="0" />
</c:when>
<c:when test="${daysLeft == 0}">
D-Day
</c:when>
<c:otherwise>
종료
</c:otherwise>
</c:choose>
날짜 파싱
<!-- 문자열을 Date로 변환 -->
<fmt:parseDate value="2024-12-31" pattern="yyyy-MM-dd" var="targetDate" />
<!-- 비교 -->
<c:if test="${now.time < targetDate.time}">
아직 2024년 12월 31일이 되지 않았습니다.
</c:if>
상대적 시간 표시
<!-- 몇 분/시간/일 전 표시 -->
<jsp:useBean id="now" class="java.util.Date" />
<c:set var="diff" value="${now.time - post.regDate.time}" />
<c:set var="diffMinutes" value="${diff / (60 * 1000)}" />
<c:set var="diffHours" value="${diff / (60 * 60 * 1000)}" />
<c:set var="diffDays" value="${diff / (24 * 60 * 60 * 1000)}" />
<c:choose>
<c:when test="${diffMinutes < 1}">
방금 전
</c:when>
<c:when test="${diffMinutes < 60}">
<fmt:formatNumber value="${diffMinutes}" maxFractionDigits="0" />분 전
</c:when>
<c:when test="${diffHours < 24}">
<fmt:formatNumber value="${diffHours}" maxFractionDigits="0" />시간 전
</c:when>
<c:when test="${diffDays < 7}">
<fmt:formatNumber value="${diffDays}" maxFractionDigits="0" />일 전
</c:when>
<c:otherwise>
<fmt:formatDate value="${post.regDate}" pattern="yyyy-MM-dd" />
</c:otherwise>
</c:choose>
월/년 비교
<!-- 이번 달 게시물인지 확인 -->
<fmt:formatDate value="${now}" pattern="yyyyMM" var="currentMonth" />
<fmt:formatDate value="${post.regDate}" pattern="yyyyMM" var="postMonth" />
<c:if test="${currentMonth eq postMonth}">
<span>이번 달 게시물</span>
</c:if>
<!-- 올해 게시물인지 확인 -->
<fmt:formatDate value="${now}" pattern="yyyy" var="currentYear" />
<fmt:formatDate value="${post.regDate}" pattern="yyyy" var="postYear" />
<c:choose>
<c:when test="${currentYear eq postYear}">
<fmt:formatDate value="${post.regDate}" pattern="MM/dd" />
</c:when>
<c:otherwise>
<fmt:formatDate value="${post.regDate}" pattern="yyyy/MM/dd" />
</c:otherwise>
</c:choose>
시간대 설정
<!-- 한국 시간대 설정 -->
<fmt:setTimeZone value="Asia/Seoul" />
<!-- 또는 -->
<fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm" timeZone="Asia/Seoul" />
주의사항
- 복잡한 날짜 연산은 서버(Java)에서 처리 권장
- JSTL 날짜 연산은 밀리초 기반
- 시간대 설정 주의
- EL에서 직접 Date 메서드 호출 제한됨
html
| No | 작성일 | Title |
|---|---|---|
| 2888 | 2026. 05. 26. | 반응형 이미지 운영 가이드: srcset, sizes, picture, lazy loading으로 LCP와 트래픽 줄이기 |
| 2824 | 2026. 05. 18. | 실무 문의 폼 접근성 점검: fieldset, autocomplete, Constraint Validation API 적용법 |
| 2626 | 2026. 04. 27. | CSS Anchor Positioning 완벽 가이드 — JavaScript 없이 툴팁·팝오버를 정밀하게 배치하는 새로운 CSS 표준 |
| 2547 | 2026. 04. 19. | HTML Invoker Commands API 완벽 가이드: JavaScript 없이 버튼으로 팝업·다이얼로그 제어하기 |
| 2494 | 2026. 04. 14. | 2025/2026 CSS 최신 기능 완벽 정리: View Transitions, Anchor Positioning, 스크롤 애니메이션 |
| 2473 | 2026. 04. 13. | CSS 2026 완벽 가이드: Scroll-Driven Animations, View Transitions, Masonry Layout |
| 2453 | 2026. 04. 12. | CSS @layer, :has(), View Transitions API 실전 가이드: 모던 CSS의 새로운 표준 |
| 2429 | 2026. 04. 11. | CSS Anchor Positioning과 Popover API 실전 가이드 |
| 2393 | 2026. 04. 09. | CSS Anchor Positioning과 Popover API 실전 가이드 - JavaScript 없는 UI 구현 |
| 2372 | 2026. 04. 08. | 2025-2026 CSS 최신 기능 완전 가이드: Container Queries, CSS Nesting, View Transitions, Scroll-driven Animations |