이전달 날짜 클릭시 이전달 날짜에 해당하는 다이어리로 이동 및 다이어리에서 입력 후 달력으로 돌아왔을 때 해당하는 달로 이동
<%@ 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> <button type="reset">취소</button></td>
</tr>
</table>
</div>
</form>
</body>
</html>