728x90
이전에 만들었던 달력(3월)을 업그레이드 했다.
이전달과 다음달을 누르면 해당 월의 달력이 나오도록하기 위해
targetYear
targetMonth를 String으로 선언하고 request.getParameter()로 받아 올 수 있도록 한다.
targetYear와 targetMonth가 null일때는 오늘 날짜(해당 월)의 달력을 출력하도록 한다.
calendarVer3.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Calendar"%>
<%
String targetYear= request.getParameter("targetYear");
String targetMonth = request.getParameter("targetMonth");
// 1)오늘 날짜를 구하고
Calendar firstDate = Calendar.getInstance();
// 2) 1)의 오늘날짜를 일만 1일로 변경한다
if(targetMonth == null || targetYear == null) {
firstDate.set(Calendar.DATE, 1); // 2024/3/8 -> 2024/3/1변경
} else {
firstDate.set(Calendar.YEAR, Integer.parseInt(targetYear));
firstDate.set(Calendar.MONTH, Integer.parseInt(targetMonth));
firstDate.set(Calendar.DATE, 1);
}
// 3) 시작 빈 TD의 개수를 구하기 위해 firstDate의 요일값을 구한다
// 일요일 -> 1, 토요일 -> 7
int yo = firstDate.get(Calendar.DAY_OF_WEEK);
// 시작 빈 TD는 일요일 -> 0, 월요일 -> 1, 토요일 -> 6
// 4) 패턴을 보면 요일값에서 -1하면 시작공백TD의 개수와 일치한다
int preBlank = yo - 1;
// 5) firstDate가 가질수 있는 제일 큰 날짜값(마지막 날짜 28/29/30/31)을 구한다
int lastDate = firstDate.getActualMaximum(Calendar.DATE);
// 6) 테이블출력에 필요한 전체 TD개수를 구할려고 하니 lastDate 뒤 공백TD의 개수가 필요
// 일단 0으로...
int afterBlank = 0;
// 7) 전체 TD개수는 7로 나누어 떨어져야 한다
if((preBlank + lastDate + afterBlank)%7 != 0) {
// 1이 남는다 -> 6개의 TD가 필요
// 2가 남는다 -> 5개의 TD가 필요
afterBlank = 7 - (preBlank + lastDate + afterBlank)%7;
}
// 8) 전체 TD의 개수는
int totalTd = preBlank + lastDate + afterBlank;
// TD를 원하는 개수만큼 반복시켜 출력
System.out.println(totalTd + " <-- totalTd"); // 42
int year = firstDate.get(Calendar.YEAR); // 2024
int month = firstDate.get(Calendar.MONTH); // 2
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- Latest compiled and minified CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Latest compiled JavaScript -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body class="container">
<h1><%=year%>년 <%=month+1%>월</h1>
<a href="./calendarVer3.jsp?targetYear=<%=year%>&targetMonth=<%=month-1%>">이전달</a>
<a href="./calendarVer3.jsp?targetYear=<%=year%>&targetMonth=<%=month+1%>">다음달</a>
<table class="table table-dark table-striped" >
<tr>
<th>일</th>
<th>월</th>
<th>화</th>
<th>수</th>
<th>목</th>
<th>금</th>
<th>토</th>
</tr>
<tr>
<%
for(int d = 1; d <= totalTd; d++) {
%>
<td>
<%
int t = d - preBlank;
if( t >= 1 && t <= lastDate) {
%>
<span><%=t%></span>
<%
}
%>
</td>
<%
if(d%7 == 0) {
%>
</tr><tr>
<%
}
}
%>
</tr>
</table>
</body>
</html>
728x90
'STUDY > JSP' 카테고리의 다른 글
20240313 값을 넘기는 3가지 방법 (0) | 2024.03.13 |
---|---|
20240312 <a>태그로 값 넘겨 구구단 출력 (0) | 2024.03.12 |
20240312 카드 출력 (0) | 2024.03.12 |
20240312 원피스 출력 (0) | 2024.03.12 |
20240312 로또 추첨기 (0) | 2024.03.12 |