
SOFTMOA TECHNOLOGY
[ jstl ] jstl 에서 현재날짜 기준으로 연산
소프트모아가 정리한 기술 기록입니다.
Contents
작성일 2016. 01. 13.
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 메서드 호출 제한됨
Share this
Html and CSS
Showing 1 to 10 of 70 entries
