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 |
|---|---|---|
| 3364 | 2026. 08. 16. | HTML 폼 오류를 누구나 이해하게 만드는 방법: label·aria-describedby·aria-live 실전 가이드 |
| 3332 | 2026. 08. 07. | CSS @layer로 스타일 충돌 줄이기: 대규모 웹 프로젝트 우선순위 설계 가이드 |
| 3300 | 2026. 07. 30. | CSS Container Query 실전 적용: 컴포넌트가 놓인 영역에 맞춰 반응형 만들기 |
| 3269 | 2026. 07. 22. | 접근성 있는 모달 만들기: HTML dialog와 포커스 관리 실전 가이드 |
| 3241 | 2026. 07. 14. | 반응형 이미지 최적화: picture·srcset·sizes로 모바일 전송량 줄이기 |
| 3186 | 2026. 07. 05. | HTML Popover API로 자바스크립트 드롭다운 메뉴 줄이기 |
| 3144 | 2026. 06. 27. | CSS 컨테이너 쿼리 운영 가이드: 화면이 아니라 컴포넌트 폭에 맞춰 레이아웃 바꾸기 |
| 3088 | 2026. 06. 19. | 접근성 있는 모달 창 구현: dialog, focus, 닫기 동작을 함께 설계하기 |
| 2999 | 2026. 06. 11. | HTML 폼 검증 운영 가이드: 브라우저 기본 검증과 서버 검증을 함께 설계하기 |
| 2943 | 2026. 06. 03. | CSS 컨테이너 쿼리 실전 적용: 화면이 아니라 컴포넌트 너비에 맞춰 카드 레이아웃 바꾸기 |