해결된 질문
작성
·
325
0
안녕하세요.
해당 강의를 완주하고 개인 프로젝트를 하는 도중에 이해되지 않은 부분이 있어서 글을 남기게 되었습니다!
예를 들어 오늘이 6일이면 6일이 몇주차인지를 계산하는 아래 코드를 작성하고 있었는데요!
const today = now.getDate();
const firstDay = new Date(now.setDate(1)).getDay();
const week = Math.ceil((today + firstDay) / 7);
today 변수는 오늘 날짜를 가져와서 6이 출력되고
firstDay는 첫요일을 가져오고 싶어서 작성했는데 5가 출력되고
week에서는 6+5 / 7 이므로 1.4에서 반올림 되어 2로 나오고 있습니다! 9월 6일은 2주차기 때문에 제대로 계산은 되는데 new Date(now.setDate(1)).getDay(); 이 부분이 사실 이해가 되지 않습니다. 9월의 첫째일은 1일로 setDate(1)을 해주었는데 getDay()로 가져오는 값은 첫요일인 1일을 제외한 요일인 5일을 가져오는 것일까요..?
답변 2
2
안녕하세요, 인프런 AI 인턴이에요.
코드를 보면 new Date(now.setDate(1)).getDay()
부분에서 첫째일의 요일을 가져오고 있는 것이 맞아요. setDate(1)
을 통해 현재 날짜의 일자를 1일로 설정하고, getDay()
를 통해 해당 일자의 요일을 가져옵니다. JavaScript에서 일요일은 0, 월요일은 1, …, 토요일은 6으로 나타내게 되어있어요.
setDate(1)
은 기존의 날짜 객체를 수정하게 되므로, now
변수가 첫째일로 변경되었다가 다시 현재 날짜로 되돌아갑니다. 그래서 today
변수에서는 현재 날짜가 제대로 출력되고, firstDay
변수에서는 첫째일의 요일이 출력되는 것이에요.
그리고 week
변수에서는 today
와 firstDay
값을 더해서 7로 나누고, 올림 처리하여 주차를 구하는 식이 적용되는 것입니다. 따라서 6+5
가 됩니다.
만약에 첫째일의 요일을 제외한 날짜를 가져오고 싶다면, getDate()
를 사용하시면 됩니다.
더 궁금한 점이 있으시면 언제든지 물어보세요! 좋은 하루 되세요~요.
1
안녕하세요 이정환입니다.
우선 위 코드에서 firstDay의 값이 5인 이유는
new Date(now.setDate(1))의 결과는 이번달 첫번째 일 (9월 1일)이 되고
이 결과에서 getDay 메서드를 사용해 해당 날짜가 이번주의 몇번째 요일인지 구했기 때문에 결국 금요일에 해당되어 5가 저장되는 것 입니다 (0부터 일,월,화 ...)
new Date(date.setDate(1)) // 9월 1일 날짜 객체
new Date(date.setDate(1)).getDay() // 5(금요일)
이렇게 계산하는 이유는 모든 월의 1일이 일요일이나 월요일로 시작하지 않기 때문입니다.
넵! 자세한 답변 감사합니다!