본문 바로가기

STUDY/JSP

20240313 달력(전체)

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