WORK
[JAVASCRIPT] 달력(calendar) 만들기, 날짜 요일 구하기
8밀리
2020. 7. 27. 19:24
달력형태로 저장된 일정을 보여줘야하는 기능이 추가되어, 처음에는 플러그인을 쓰려고 찾아봤는데 단순히 조회해서 보여주기만 하는 형태라 javascript로 달력 만들기로 했다.
관련 내용은 검색하면 바로 쓸만한 괜찮은 소스들이 많다.
참고 : [JavaScript]달력 만들기, Date 객체 (https://jerryjerryjerry.tistory.com/26)
위 사이트 소스를 참고하여 약간 수정한 내용이다.
우선 소스를 바로 보기 전에 기본적으로 알고 있어야할 Date() 관련 함수들을 정리하자.
오늘 날짜 및 요일 구하기
<!DOCTYPE html>
<html lang="ko">
<script language="javascript">
var today = new Date(); //오늘 날짜
console.log("new Date() : " + today);
console.log("today.getFullYear() : " + today.getFullYear());
console.log("today.getMonth() : " + today.getMonth());
console.log("today.getDate() : " + today.getDate());
console.log("today.getDay() : " + today.getDay());
</script>
</html>
new Date() : Mon Jul 27 2020 14:37:00 GMT+0900 (대한민국 표준시)
today.getFullYear() : 2020
today.getMonth() : 6
today.getDate() : 27
today.getDay() : 1
확인해보면 알겠지만 달과 요일의 경우 시작 기준인 1월, 일요일의 값이 0시작한다.
그러니 현재의 달을 표현해주려면 +1을 해주면 되고, getDay 결과값을 통해 오늘이 월요일이라는 정보를 가져올 수 있다.
요일 구하는 함수
<!DOCTYPE html>
<html lang="ko">
<script language="javascript">
//특정 날짜의 요일 구하기
function getInputDayLabel() {
var week = new Array('일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일');
var today = new Date('2020-07-27').getDay();
var todayLabel = week[today];
return todayLabel;
}
</script>
</html>
참고 : elena90.tistory.com/entry/Java-Script-오늘날짜-특정-날짜의-요일-구하기-예제-년도-월-일-요일
달력 (Calendar)
그러면 이제 캘린더를 그리는 함수를 확인해보자.
참고 소스와 달리 월요일부터 시작하는 달력이 필요해서 관련 내용을 수정했다.
<!DOCTYPE html>
<html lang="ko">
<style>
table {
width: 800px;
height: 700px;
border: 1px solid #444444;
border-collapse: collapse;
}
</style>
<script language="javascript">
var today = new Date(); //오늘 날짜
var date = new Date();
//이전달
function beforem() //이전 달을 today에 값을 저장
{
today = new Date(today.getFullYear(), today.getMonth() - 1, today.getDate());
autoReload(); //만들기
}
//다음달
function nextm() //다음 달을 today에 저장
{
today = new Date(today.getFullYear(), today.getMonth() + 1, today.getDate());
autoReload();
}
//오늘선택
function thisMonth(){
today = new Date();
autoReload();
}
function autoReload()
{
var nMonth = new Date(today.getFullYear(), today.getMonth(), 1); //현재달의 첫째 날
var lastDate = new Date(today.getFullYear(), today.getMonth() + 1, 0); //현재 달의 마지막 날
var tbcal = document.getElementById("calendar"); // 테이블 달력을 만들 테이블
var yearmonth = document.getElementById("yearmonth"); // 년도와 월 출력할곳
yearmonth.innerHTML = today.getFullYear() + "년 "+ (today.getMonth() + 1) + "월"; //년도와 월 출력
if(today.getMonth()+1==12) // 눌렀을 때 월이 넘어가는 곳
{
before.innerHTML=("<"+today.getMonth())+"월";
next.innerHTML="1월"+">";
}
else if(today.getMonth()+1==1) // 1월 일 때
{
before.innerHTML="<"+"12월";
next.innerHTML=(today.getMonth()+2)+"월" +">";
}
else // 12월 일 때
{
before.innerHTML="<"+(today.getMonth())+"월";
next.innerHTML=(today.getMonth()+2)+"월"+">";
}
// 남은 테이블 줄 삭제
while (tbcal.rows.length > 2)
{
tbcal.deleteRow(tbcal.rows.length - 1);
}
var row = null;
row = tbcal.insertRow();
var cnt = 0;
var dayCheck = (nMonth.getDay()==0) ? 7 : nMonth.getDay(); //일요일을 마지막으로 넣기 위해서.
// 1일 시작칸 찾기
for (i = 0; i < (dayCheck-1); i++)
{
cnt = cnt + 1; //요일값
cell = row.insertCell();
if (i>4) { //주말
cell.style.backgroundColor = "#f7f7f7";
}
}
// 달력 출력
for (i = 1; i <= lastDate.getDate(); i++) // 1일부터 마지막 일까지
{
cell = row.insertCell();
var str="";
str += "<div>"+i+"</div>";
var day = (i<10) ? "0"+i : i;
str += "<div id='"+day+"'></div>"; //나중에 원하는 날에 일정을 넣기위해 id값을 날자로 설정
cell.innerHTML = str;
cnt = cnt + 1;
if (cnt % 7 == 6) {//토요일
var str="";
str += "<div>"+i+"</div>";
var day = (i<10) ? "0"+i : i;
str += "<div id='"+day+"'>";
str += "</div>";
cell.innerHTML = str;
cell.style.color = "#009de0";
cell.style.backgroundColor = "#f7f7f7";
}
if (cnt % 7 == 0) { //일요일
var str="";
str += "<div>"+i+"</div>";
var day = (i<10) ? "0"+i : i;
str += "<div id='"+day+"'>";
str += "</div>";
cell.innerHTML = str;
row = calendar.insertRow();// 줄 추가
cell.style.color = "#ed5353";
cell.style.backgroundColor = "#f7f7f7";
}
//마지막 날짜가 지나면 일요일까지 칸 그리기
if(lastDate.getDate() == i && ((cnt % 7) != 0)){
var add = 7 - (cnt % 7);
for(var k = 1; k <= add; k++){
cell = row.insertCell();
cnt = cnt + 1;
if (cnt % 7 == 6) {//토요일
cell.style.backgroundColor = "#f7f7f7";
}
if (cnt % 7 == 0) { //일요일
cell.style.backgroundColor = "#f7f7f7";
}
}
}
//오늘날짜배경색
if( today.getFullYear() == date.getFullYear() && today.getMonth() == date.getMonth() && i==date.getDate() )
{
cell.style.backgroundColor = "#e2f3da"; //오늘날짜배경색
}
//마지막 날짜가 지나면 일요일까지 칸 그리기
if(lastDate.getDate() == i && ((cnt % 7) != 0)){
var add = 7 - (cnt % 7);
for(var k = 1; k <= add; k++){
cell = row.insertCell();
cnt = cnt + 1;
if (cnt % 7 == 6) {//토요일
cell.style.backgroundColor = "#f7f7f7";
}
if (cnt % 7 == 0) { //일요일
cell.style.backgroundColor = "#f7f7f7";
}
}
}
}
//원하는 날짜 영역에 내용 추가하기
var tdId = "01"; //1일
var str = "";
str += "<br>09:00 일정1";
str += "<br>12:00 일정2 \n";
document.getElementById(tdId).innerHTML = str;
}
</script>
<body onload="autoReload();">
<table align="center" id="calendar">
<tr>
<td>
<a id="before" href="javascript:beforem()"></a>
</td>
<td colspan="4" align="center">
<div id="yearmonth"></div>
</td>
<td>
<a id="next" href="javascript:nextm()"></a>
</td>
<td>
<a href="javascript:thisMonth()">오늘</a>
</td>
</tr>
<tr>
<td width="14%"> 월 </td>
<td width="14%"> 화 </td>
<td width="14%"> 수 </td>
<td width="14%"> 목 </td>
<td width="14%"> 금 </td>
<td width="14%"><font color="#009de0">토</font></td>
<td width="14%"><font color="#ed5353">일</font></td>
</tr>
</table>
</body>
</html>
포스팅에 디자인을 다 넣을 수 없어서 뺐더니 약간 이상해졌지만.. 완성하면 이렇다