[구디아카데미] [IT국비지원] 2주차 달력만들기

띵거니·2023년 4월 18일
1

jsp 파일로 코딩

이전달 날짜 클릭시 이전달 날짜에 해당하는 다이어리로 이동 및 다이어리에서 입력 후 달력으로 돌아왔을 때 해당하는 달로 이동

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Calendar" %>
<%
	int targetYear = 0;
	int targetMonth = 0;
	int targetDate = 0;
	
	if(request.getParameter("targetYear") == null
			|| request.getParameter("targetMonth") == null) {
		Calendar today = Calendar.getInstance();
		targetYear = today.get(Calendar.YEAR);
		targetMonth = today.get(Calendar.MONTH);
	} else {
		targetYear = Integer.parseInt(request.getParameter("targetYear"));
		targetMonth = Integer.parseInt(request.getParameter("targetMonth"));
		// targetMonth와 targetYear의 예외처리
		if (targetMonth == -1) {
			targetMonth = 11;
			targetYear--;
		} else if (targetMonth == 12){
			targetMonth = 0;
			targetYear++;
		}
	}


	// 디버깅
	// http://localhost/web0417/calendar.jsp?targetYear=2023&targetMonth=11
	System.out.println(targetYear + "<-- targetYear");
	System.out.println(targetMonth + "<-- targetMonth");
	
	// 달력 1일 앞의 공백 수
	// 현재 월의 1일의 DAY_OF_WEEK(일 1, 월 2, ... 토 7) - 1
	int startTdBlank = 0;
	
	// 출력하고자 하는 년/월/1일
	Calendar firstDate = Calendar.getInstance();
	firstDate.set(Calendar.YEAR, targetYear);
	firstDate.set(Calendar.MONTH, targetMonth);
	firstDate.set(Calendar.DATE, 1);
	
	// 출력하고자 하는 년/월의 공백 수
	startTdBlank = firstDate.get(Calendar.DAY_OF_WEEK) - 1;
	System.out.println(startTdBlank + "<-- startTdBlank");
	
	// 출력하고자 하는 년/월/마지막날짜
	int endDateNum = firstDate.getActualMaximum(Calendar.DATE);
	System.out.println(endDateNum + "<-- endDateNum");
	
	
	// 출력하는 전월 년/월/마지막 날짜
	int preTargetYear = targetYear;
	int preTargetMonth = targetMonth - 1;
	
	if (preTargetMonth == -1) {
		preTargetMonth = 11;
		preTargetYear--;
	}
	System.out.println(preTargetYear + "<-- preTargetYear");
	System.out.println(preTargetMonth + "<-- preTargetMonth");
	
	// 출력하는 전월 년/월/마지막 날짜 추출
	Calendar preMonth = Calendar.getInstance();
	preMonth.set(Calendar.YEAR, preTargetYear);
	preMonth.set(Calendar.MONTH, preTargetMonth);
	int preEndDateNum = preMonth.getActualMaximum(Calendar.DATE);
	System.out.println(preEndDateNum + "<-- preEndDateNum");
	
	// 출력하는 다음달 예외 처리
	int nextTargetYear = targetYear;
	int nextTargetMonth = targetMonth + 1;
	
	if (nextTargetMonth == 12){
		nextTargetMonth = 0;
		nextTargetYear++;
	}
	System.out.println(nextTargetYear + "<-- nextTargetYear");
	System.out.println(nextTargetMonth + "<-- nextTargetMonth");
	
	
	// 달력 마지막날짜 출력 후 공백(td) 수
	int endTdBlank = 0;
	if((startTdBlank + endDateNum) % 7 != 0) {
		endTdBlank = 7 - ((startTdBlank + endDateNum) % 7);
	}
	
	int totalTdCnt = startTdBlank + endDateNum + endTdBlank;
	
%>

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
	<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
	<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
	<div class="container">
		<h1>
			<a href="./calendar.jsp?targetYear=<%=targetYear%>&targetMonth=<%=targetMonth - 1%>">이전달</a>
			<%=targetYear%>년 <%=targetMonth + 1%>월
			<a href="./calendar.jsp?targetYear=<%=targetYear%>&targetMonth=<%=targetMonth + 1%>">다음달</a>
		</h1>
		<table class="table table-dark table-striped">
			<thead>
				<tr>
					<th></th>
					<th></th>
					<th></th>
					<th></th>
					<th></th>
					<th></th>
					<th></th>
				</tr>
			</thead>
			<tr>
				<%
					for (int i = 0; i < totalTdCnt; i++) {
						if(i % 7 == 0){
				%>
						</tr><tr>
				<%
						}
						// 날짜 출력
						int dateNum = i - startTdBlank + 1;
						
						// 전월 날짜 출력
						int preMonthDate = preEndDateNum - startTdBlank + 1;
						
						int nextMonthDate = i - endDateNum - startTdBlank + 1;
						
						if (dateNum > 0 && dateNum <= endDateNum) {
							if (i % 7 == 0){
				%>
						<td>
						<!-- targetDate는 출력하는 날짜 그대로 가지고 오면 되기때문에 출력하는 날짜값을 대입해줌 -->
						<a href="./calendarForm.jsp?targetYear=<%=targetYear%>&targetMonth=<%=targetMonth%>&targetDate=<%=dateNum%>" class="text-danger">
						<%=dateNum%>
						</a>
						</td>
				<%
							} else if (i % 7 == 6){
				%>
						<td>
						<a href="./calendarForm.jsp?targetYear=<%=targetYear%>&targetMonth=<%=targetMonth%>&targetDate=<%=dateNum%>" class="text-primary">
						<%=dateNum%>
						</a>
						</td>
				<%
							} else {
				%>
						<td>
						<a href="./calendarForm.jsp?targetYear=<%=targetYear%>&targetMonth=<%=targetMonth%>&targetDate=<%=dateNum%>" class="text-light">
						<%=dateNum%>
						</a>
						</td>
				<%
							}
						} else if (dateNum < 1){
				%>
							<td>
							<a href="./calendarForm.jsp?targetYear=<%=preTargetYear%>&targetMonth=<%=preTargetMonth%>&targetDate=<%=preMonthDate + i%>" class="text-muted">
							<%=preMonthDate + i%>
							</a>
							</td>
				<%
						} else {
				%>
							<td>
							<a href="./calendarForm.jsp?targetYear=<%=nextTargetYear%>&targetMonth=<%=nextTargetMonth%>&targetDate=<%=nextMonthDate%>" class="text-muted">
							<%=nextMonthDate%>
							</a>
							</td>
				<%
						}
					}
				%>
			</tr>
		</table>
	</div>
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Calendar" %>
<%
	int targetYear = 0;
	int targetMonth = 0;
	int targetDate = 0;
	
	if(request.getParameter("targetYear") == null
			|| request.getParameter("targetMonth") == null) {
		Calendar today = Calendar.getInstance();
		targetYear = today.get(Calendar.YEAR);
		targetMonth = today.get(Calendar.MONTH);
		targetDate = today.get(Calendar.DATE);
	} else {
		targetYear = Integer.parseInt(request.getParameter("targetYear"));
		targetMonth = Integer.parseInt(request.getParameter("targetMonth"));
		targetDate = Integer.parseInt(request.getParameter("targetDate"));
	}
	
%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
	<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
	<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
	<form action="./calendar.jsp?targetYear=<%=targetYear%>&targetMonth=<%=targetMonth%>" method="post">
		<div class="container">
			<h1>
				<%=targetYear%>년 <%=targetMonth + 1%>월 <%=targetDate%>일 다이어리 
			</h1>
			<table>
				<tr>
					<th>일정 등록</th>
				</tr>
				<tr>
					<th>제목</th>
					<td><input type="text" size="53"> <input type="checkbox">중요</td>
				</tr>
				<tr>
					<th>장소</th>
					<td><input type="text" size="53"></td>
				</tr>
				<tr>
					<th>일시</th>
					<td><input type="datetime-local"> - <input type="datetime-local"></td>
				</tr>
				<tr>
					<th style="vertical-align: top">설명</th>
					<td><textarea cols="55" rows="7"></textarea></td>
				</tr>
				<tr>
					<td colspan="2"><button type="submit">등록</button>&nbsp;&nbsp;<button type="reset">취소</button></td>
				</tr>
			</table>
		</div>
	</form>
</body>
</html>
profile
발효 중인 국비생

0개의 댓글