Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>JavaScript Calendar</title>
- <style type="text/css">
- .calneder-header {
- width: 100%;
- height: 30px;
- margin-bottom: 5px;
- }
- .calneder-header > div {
- float: left;
- width: 33.333%;
- }
- #year-month {
- text-align: center;
- }
- .calneder-header .next-btns {
- text-align: right;
- }
- .calendar-table {
- border-collapse: collapse;
- width: 100%;
- }
- .calendar-table thead td {
- background-color: #E5E5E5;
- }
- .calendar-table tr td:first-child {
- color: #FF0000;
- }
- .calendar-table tr td:last-child {
- color: #0000FF;
- }
- .calendar-table td {
- border: 1px solid #666;
- text-align: center;
- padding: 10px;
- }
- .today {
- background-color: #C0DFE8;
- }
- .calendar-footer {
- margin-top: 10px;
- text-align: center;
- }
- </style>
- </head>
- <body>
- <!-- JavaScript로 달력 만들기 예제 -->
- <div class="calneder-header">
- <div class="prev-btns">
- <button onclick="moveYearMonth('Y', -1)"><<이전년도</button>
- <button onclick="moveYearMonth('M', -1)"><이전달</button>
- </div>
- <div id="year-month"></div>
- <div class="next-btns">
- <button onclick="moveYearMonth('M', 1)">다음달></button>
- <button onclick="moveYearMonth('Y', 1)">다음년도>></button>
- </div>
- </div>
- <div id="calendar"></div>
- <div class="calendar-footer"><button onclick="goToday()">오늘 날짜로</button></div>
- <script type="text/javascript">
- var currentYear, currentMonth; //년,월 변경 시 값을 기억하기 위한 전역 변수 선언
- goToday(); //페이지에 처음 들어오면 goToday함수 실행하여 오늘 날짜 달력 표시
- //달력을 화면에 표시해주는 함수
- function calendar(year,month) {
- //현재 출력중인 년도를 기억하기 위한 변수 currentYear의 값을 전달받은 인수 year의 값으로 변경
- currentYear = year;
- //현재 출력중인 월을 기억하기 위한 변수 currentMonth 값을 전달받은 인수 month 값으로 변경
- currentMonth = month;
- //월별 날자 수 배열, 2월은 해마다 다르므로 getFebuaryDays 함수로 구함
- var lastDaysOfYear = [31,getFebuaryDays(year),31,30,31,30,31,31,30,31,30,31];
- var lastDayOfMonth = lastDaysOfYear[month]; //선택된 달의 마지막 날짜 구하기
- var firstDate = new Date(year, month, 1); //선택된 년월의 1일을 기준으로 Date 생성
- var lastDate = new Date(year, month, lastDayOfMonth); //선택된 년월의 마지막 날을 기준으로 Date 생성
- var weekOfFirstDay = firstDate.getDay();// 선택된 달의 1일의 요일 구하기
- var weekOfLastDay = lastDate.getDay();// 선택된 달의 1일의 요일 구하기
- document.getElementById("year-month").innerHTML = year + "." + (month+1);
- //달력 테이블 시작하기
- var calendarTable = "<table class='calendar-table'><thead><tr><td>일</td><td>월</td><td>화</td><td>수</td><td>목</td><td>금</td><td>토</td></tr></thead><tbody>";
- //1일부터 선택된 달의 마지막 날까지 반복
- var week = 0; //요일을 일요일로 초기화(반복문에서 0~6 반복)
- for( var i=1; i<=lastDayOfMonth; i++ ){
- if( week === 0 ) calendarTable += "<tr>"; //요일이 0이면 <tr> 추가
- if( i === 1 && weekOfFirstDay > 0) { //만일 1일이 일요일이 아니면
- for( var j=0;j<weekOfFirstDay; j++) { //1일의 요일 전까지 빈 칸<td>를 추가
- calendarTable += "<td> </td>";
- week++; //빈 칸을 하나 추가할 때마다 week(요일) 값을 1씩 늘림
- } //j 반복문 끝
- }
- //출력되는 날짜가 시스템의 현재 년월일과 일치하면 td에 today class 추가
- if( year === new Date().getFullYear() && month === new Date().getMonth() && i === new Date().getDate() ) {
- calendarTable += "<td class='today'>";
- } else {
- calendarTable += "<td>";
- }
- calendarTable += i + "</td>"; //반목되는 i 값을 날짜로 칸 추가
- week++; //날짜 칸을 추가할 때마다 week(요일) 값을 1씩 늘림
- //만일 선택된 달의 마지막 날이 토요일이 아니면 마지막 날 다음부터 토요일까지 빈 칸 추가
- if( i === lastDayOfMonth && weekOfLastDay < 6) {
- for( var k=weekOfLastDay+1;k<=6; k++) {
- calendarTable += "<td> </td>";
- week++;
- } //k 반복문 끝
- }
- if(week > 6) {
- calendarTable += "</tr>";
- week = 0;
- }
- } //i 반복문 끝
- calendarTable += "</tbody></table>";
- document.getElementById("calendar").innerHTML = calendarTable;
- } //함수 calendar() 끝
- //년도 별 2월의 날자수를 구하는 함수
- function getFebuaryDays(year) {
- var m2days;
- if ( ( year % 100 != 0 ) && ( year % 4 == 0 ) || ( year % 400 == 0 ) ){
- return 29;
- }else{
- return 28;
- }
- }
- //년도, 날짜 이동 버튼에서 호출하여 실행하는 함수
- //YM = 값이 Y이면 년도를, M이면 월을 변경
- //val = -1 도는 1, -1이면 더해도 빼기가 되고 1은 더해줌
- function moveYearMonth(YM, val) {
- if( YM === "Y" ) { //연도이면 값을 그대로 빼거나 더해 줌
- calendar((currentYear + val),currentMonth);
- } else if( YM === "M" ) {
- if( currentMonth + val > 11 ) {
- //월의 증감값 11(12월) 보다 크면 년도를 1 증가시켜주고 다음년도의 1월(0)로 이동
- calendar((currentYear + 1),0);
- } else if( currentMonth + val < 0 ) {
- //월의 증감값이 0(1월) 보다 작으면 이면 년도를 1 감소시켜주고 다음년도의 12월(11)로 이동
- calendar((currentYear - 1),11);
- } else {
- //월의 증감값이 0~11 사이에 있으면 현재년도에서 월 증감값 그대로 이동
- calendar(currentYear,(currentMonth + val));
- }
- }
- }
- //오늘 날짜가 포함된 달력으로 이동
- function goToday() {
- calendar( new Date().getFullYear(), new Date().getMonth() );
- }
- </script>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment