[js] 달력만들기(2) (Calendar)

GY·2021년 6월 20일
0

Vanilla JS Project

목록 보기
10/19
post-thumbnail

다른 시도

[](https://blog.daum.net/janustop/65)

[](https://velog.io/@eesiwoo/D23%EA%B3%BC%EC%A0%9C-%EB%8B%AC%EB%A0%A5-%EB%A7%8C%EB%93%A4%EA%B8%B0)

엎고, 다시하기로 결정했다.

테이블에 값넣는 방법을 잘 몰랐는데, insertcell()함수를 찾았다.

그리고 무작정 날짜를 넣는 것보다는, 필요한 날짜를 모두 구한다음 하는게 나을 것 같았다.

var x = new Date();
var dayname = new Array("SUN", "MON", "TUE", "WED", "THI", "FRI", "SAT");
var monthname = new Array(
  "JAN",
  "FAB",
  "MAR",
  "APR",
  "MAY",
  "JUN",
  "JUL",
  "AUG",
  "SEP",
  "OCT",
  "NOV",
  "DEC"
);

//참고 : https://poiemaweb.com/js-date

var day = dayname[x.getDay()];
//getDay함수는 0부터 시작해 요일을 숫자로 나타내므로, dayname배열의 인덱스 값으로 사용해 매칭되는 요일을 출력하도록 한다.
var date = x.getDate();
var month = monthname[x.getMonth()];
//var month = x.getMonth() + 1 :월을 숫자로 표기할 경우, getMonth로 불러올 시 1월은 숫자0으로 출력되므로, +1을 해줘야한다.(1월=0+1,2월=1+!)
//현재는 요일과 같이 monthname배열안의 영어로 월을 표기할 것이기 때문에, getMonth로 얻은 숫자로 나타낸 월값을 인덱스로 넣은다음, 해당 키값을 불러오도록 한다.
//테스트 :
// alert(day + " " + date + " " + month);

//이번 달 첫번째 날짜 구하기
var firstdate = new Date(x.getYear(), x.getMonth(), 1).getDate();
// 현재 날짜의 연,월을 받아온 뒤, 이 정보의 첫번째 값....
var lastdate = new Date(x.getYear(), x.getMonth() + 1, 0).getDate();
//test:
// alert(month + "/" + firstdate + "~" + lastdate);

//이번 달 첫번째 날짜의 요일 구하기
// var firstday = new Date(x.getYear(), x.getMonth(), x.getDay(), 1).getDay();
var firstday = new Date(x.getYear(), x.getMonth() + 1, 0).getDay();
//마지막 인수를 0으로 만들었을 때 5월의 첫째날 요일인 토요일이 출력된다.
//test:
// alert(dayname[firstday]);
//SAT
// alert(firstday);
//6

/*참고: https://www.python2.net/questions-130270.htm
        https://hianna.tistory.com/473
        https://nearman.tistory.com/entry/7-%EB%8F%99%EC%A0%81%ED%85%8C%EC%9D%B4%EB%B8%94-%EB%A7%8C%EB%93%A4%EA%B8%B0-Javascript%EB%A1%9C-%EB%8F%99%EC%A0%81%ED%85%8C%EC%9D%B4%EB%B8%94Dynamic-Table-%EB%A7%8C%EB%93%A4%EA%B8%B0
        http://kaludin.egloos.com/v/2311348
        https://curryyou.tistory.com/206
           */

//테이블에 행과 열을 추가하고, 각각 값을 넣는 방법이 감이 오지 않아서 찾아봤다.

//테이블에 날짜 값 넣기
var datecoll = new Array();
calender = document.getElementById("table1");
row = calendar.insertRow();
for (i = 1; i <= lastdate; i++) {
  datecoll.push(i);
}
//test:
//alert(datecoll);
//새로운 배열을 생성, 이번달 첫번째 날에 해당하는 요일에 1을 넣고,마지막 날짜까지 +1을 반복하며 값을 넣는다.

var table = document.getElementById("table1");
//열을 추가할 테이블 선택
var irow1 = table1.insertRow(0);
var irow2 = table1.insertRow(1);
var irow3 = table1.insertRow(2);
var irow4 = table1.insertRow(3);
var irow5 = table1.insertRow(4);

//테이블에 행추가
var icell = irow.insertCell();
// 추가한 행에 셀 추가

// var irow = table1.insertRow(0);
// var irow2 = table1.insertRow(1);
// var icell = irow.insertCell(0);
// var icell2 = irow2.insertCell(0);
// var icell21 = irow2.insertCell(1);

// icell.textContent = datecoll[0];
// icell2.textContent = "10";
// icell21.textContent = "10";

// for (i=0;i<2;i++){
//     eval("var icell"+i+)
// }

// icell.innerHTML = "4";
// 한 셀에는 입력 가능하나, 연속적으로 값을 넣을 수는 없다.

// 이런식으로 각 셀에 값을 넣을 수 있다. 반복문으로 만들 수 있겠다.
// var icell1 = irow.insertCell(0);
// icell1.textContent = "3";
// var icell1 = irow.insertCell(1);
// icell1.textContent = "3";

for (i = 0; i < lastdate + firstday; i++) {
  //   const irow = table1.insertRow(i % 7);
  //맨 뒤 셀을 추가해야하는 만큼 반복횟수도 증가한다.

  let icell = irow.insertCell(i);
  if (i < firstday) {
    icell.textContent = "*";

    /*5월의 1일은 토요일이고,일월화수목금토일 순으로 숫자로는 6이다.(getday기준)
    6번째 칸부터 날짜가 들어가야한다.따라서 6 이전의 칸은 공란을 입력한다.
    */
  } else {
    if (i == 7) {
      let icell = irow2.insertcell(i);

      irow.icell.textContent = datecoll[i - firstday];
    } else {
      icell.textContent = datecoll[i - firstday];
    }
    //첫번째 날짜가 시작되기 전 5개 칸만큼 밀어 입력했으므로, 해당 칸만큼 맨 뒤 셀을 추가한다.
  }
}

//1~31의 숫자가 한 행에 전부 입력된다.

// table1.insertRow(0).insertCell(0).innerHTML = "3";
// table1.insertRow(0).insertCell(1).innerHTML = "7";

// for (i = 0; i < lastdate; i++) {
//   table1.insertRow(i);
//   for (j = 0; j < 7; j++) {
//     table1.insertCell(j).innerHTML = "1";
//   }
// }
//추가한 셀에 1~31날짜가 담긴 배열 datecoll의 첫번째 요소 추가

//두번째 셀에 datecoll의 두번째 요소 추가

//일단, 1~31까지 (첫번째~마지막 날짜) 전부 테이블에 값을 채워보자.
// for (i = 0; i < lastdate; i++) {

//   icell[0].innerHTML = datecoll[i];
//   icell[1].innerHTML = datecoll[i];
// }

[](https://blog.daum.net/janustop/65)

[](https://velog.io/@eesiwoo/D23%EA%B3%BC%EC%A0%9C-%EB%8B%AC%EB%A0%A5-%EB%A7%8C%EB%93%A4%EA%B8%B0)

차라리...가로로 나열되는 날짜들이 줄바꿈되도록 컨테이너로 감싸고, 여백과 간격을 적당히 조정해 한 행에 날짜 7개만 들어갈 수 있도록 만들면 되지 않을까?

profile
Why?에서 시작해 How를 찾는 과정을 좋아합니다. 그 고민과 성장의 과정을 꾸준히 기록하고자 합니다.

0개의 댓글