[구디아카데미][IT국비지원]
<%@page import="java.time.DayOfWeek"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Calendar" %>
<%
int targetYear = 0;
int targetMonth = 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"));
if(targetMonth == -1) {
targetMonth = 11;
targetYear = targetYear - 1;
} else if(targetMonth == 12) {
targetMonth = 0;
targetYear = targetYear + 1;
}
}
//디버깅
//http://localhost/ex0417/calendar.jsp?targetYear=2023&targetMonth=11
//http://localhost/ex0417/calendar.jsp
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;
Calendar today = Calendar.getInstance();
int day = today.get(Calendar.DATE);
System.out.println(day + " <-- day");
//전달 마지막 일
int lastDate = 0;
Calendar PreMonth = Calendar.getInstance();
PreMonth.set(Calendar.YEAR, targetYear);
PreMonth.set(Calendar.MONTH, targetMonth-1);
lastDate = PreMonth.getActualMaximum(Calendar.DATE);
// 디버깅
System.out.println(lastDate + " <-- lastDate");
System.out.println(startTdBlank + " <-- preTdBlank");
// 출력하고자 하는 년/월/마지막날짜
int endDateNum = firstDate.getActualMaximum(Calendar.DATE);
System.out.println(endDateNum + " <-- endDateNum");
// 달력 마지막날짜 출력후 공백(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>calendar.jsp</title>
<!-- Latest compiled and minified CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Latest compiled JavaScript -->
<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-bordered">
<thead class="table-dark">
<tr>
<th>일</th>
<th>월</th>
<th>화</th>
<th>수</th>
<th>목</th>
<th>금</th>
<th>토</th>
</tr>
</thead>
<tbody>
<tr>
<%
for(int i=0; i<totalTdCnt; i++) {
if(i%7 == 0){
%>
</tr><tr>
<%
}
int dateNum = i - startTdBlank + 1;
if(dateNum > 0 && dateNum <= endDateNum){
if(i%7 == 0){
if(dateNum == day){
%>
<td class="table-warning"><a class="text-danger" href="./schedule.jsp?targetYear=<%=targetYear %>&targetMonth=<%=targetMonth %>&targetDate=<%=dateNum %>" style="text-decoration: none"><%=dateNum %></a></td>
<%
}else {
%>
<td><a class="text-danger" href="./schedule.jsp?targetYear=<%=targetYear %>&targetMonth=<%=targetMonth %>&targetDate=<%=dateNum %>" style="text-decoration: none"><%=dateNum %></a></td>
<%
}
} else {
if(dateNum == day){
%>
<td class="table-warning"><a class="text-body" href="./schedule.jsp?targetYear=<%=targetYear %>&targetMonth=<%=targetMonth %>&targetDate=<%=dateNum %>" style="text-decoration: none"><%=dateNum %></a></td>
<%
}else {
%>
<td><a class="text-body" href="./schedule.jsp?targetYear=<%=targetYear %>&targetMonth=<%=targetMonth %>&targetDate=<%=dateNum %>" style="text-decoration: none"><%=dateNum %></a></td>
<%
}
}
} else if(dateNum < 1) {
%>
<td class="text-muted table-light"><%=lastDate + (dateNum) %></td>
<%
} else {
%>
<td class="text-muted table-light"><%=i - (endDateNum + startTdBlank) + 1 %></td>
<%
}
}
%>
</tr>
</tbody>
</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;
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>schedule.jsp</title>
</head>
<body>
<h1><%=targetYear %>년 <%=targetMonth+1 %>월 <%=targetDate %>일</h1>
<h3>일정등록</h3>
<form>
<table>
<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="button">등록</button> <button type="button">취소</button></td>
</tr>
</table>
</form>
</body>
</html>
날짜 클릭시 나오는 일정 입력 폼