인프런 커뮤니티 질문&답변

하리님의 프로필 이미지
하리

작성한 질문수

한 입 크기로 잘라먹는 타입스크립트(TypeScript)

상태관리와 Props 1

강의 관련 질문은 아니지만.. javascript 함수 관련 질문 있습니다!

해결된 질문

작성

·

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 변수에서는 todayfirstDay 값을 더해서 7로 나누고, 올림 처리하여 주차를 구하는 식이 적용되는 것입니다. 따라서 6+5가 됩니다.

만약에 첫째일의 요일을 제외한 날짜를 가져오고 싶다면, getDate()를 사용하시면 됩니다.

더 궁금한 점이 있으시면 언제든지 물어보세요! 좋은 하루 되세요~요.

1

이정환 Winterlood님의 프로필 이미지
이정환 Winterlood
지식공유자

안녕하세요 이정환입니다.

우선 위 코드에서 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일이 일요일이나 월요일로 시작하지 않기 때문입니다.

하리님의 프로필 이미지
하리
질문자

넵! 자세한 답변 감사합니다!

하리님의 프로필 이미지
하리

작성한 질문수

질문하기