누코(nuuco)
오늘도 코딩
누코(nuuco)
전체 방문자
오늘
어제
  • 분류 전체보기
    • TIL
    • 에러 노트
    • 자료구조 & 알고리즘
    • 프로그래밍
    • 프로젝트
    • 한컷코딩
    • 글

공지사항

  • 🚚 (전)노션 ➡️ (현)티스토리로 블로그 이사 오는 중(⋯

최근 글

인기 글

최근 댓글

티스토리

250x250
반응형
hELLO · Designed By 정상우.
누코(nuuco)

오늘도 코딩

[JS] 룸 생성 모달에서 날짜 클릭 없이 바로 생성하면 에러 발생
에러 노트

[JS] 룸 생성 모달에서 날짜 클릭 없이 바로 생성하면 에러 발생

2022. 12. 5. 00:06

2022.10.3 (월) 작성

1. 에러❗️

룸 생성 모달에서 룸 이름만 작성하고 바로 룸 만들기를 클릭하면 날짜 관련 오류가 발생했다.

2. 상황

에러 메시지

3. 시행착오

  • 확인해보니, Date 객체를 받아와서 날짜 포맷(yyyy-MM-dd) 형식으로 바꿔주는 작업에서 에러가 발생했다.
  const setDateStr = (dateObj) => {
    return (
      dateObj.getFullYear() +
      '-' +
      (dateObj.getMonth() + 1 < 9
        ? '0' + (dateObj.getMonth() + 1)
        : dateObj.getMonth() + 1) +
      '-' +
      (dateObj.getDate() < 9 ? '0' + dateObj.getDate() : dateObj.getDate())
    );
  };
  • 이때, dateObj가 Date() 객체가 아니라서 생긴 오류였다. dateObj를 찍어보니 1664878437317이라는 숫자가 찍혔다.
  • dateObj로 넣어주는 값은 new Date().setDate(new Date().getDate() + 1)로 설정했었는데 이 값이 1664878437317 였다.

4. 해결💡

  • setDate 함수의 리턴값과 원본 값을 혼동해서 생긴 문제❗️
  • Date.setDate() 함수의 MDN 문서를 확인하면 리턴값은 '날짜를 밀리 초로 환산한 값'이고, Date 객체는 세팅한 날짜로 수정된다. (원본 객체가 수정됨)
  • 👉 변경된 Date 객체를 할당해야 하는데, 반환값을 할당해줘서 오류가 났던 것이었다.
  • 따라서 해결법은 두 가지이다.
//1. 반환 값을 new Date()로 감싸줘서 다시 새 Date 객체 만들기
return new Date(new Date().setDate(new Date().getDate() + 1))

//2. 좀 더 알아보기 쉽도록 변수를 사용하기
const today = new Date();
const tomorrow = new Date(today);
tomorrow.setDate(today.getDate() + 1); 
return tomorrow;
  • 1번 코드가 더 짧지만 2번 코드가 더 명시적이고 코드 이해하기가 쉬워서 후자로 작성하기로 했다.

5. 알게 된 것✨

Date.prototype.setDate() MDN

setDate()의 원본 객체를 수정한다. 이때의 반환 값은 "1970 년 1 월 1 일 00:00:00 UTC와 주어진 날짜 사이의 밀리 초"이다.

✅ 반환값과 원본값을 헷갈리지 말자!

const today = new Date();
const tomorrow = new Date(today);
tomorrow.setDate(today.getDate() + 1);  
// 이 경우 
// 리턴값은 "1970년 1월 1일 00:00:00 UTC와 지정된 날짜 사이의 밀리초 수"이고
// tomorrow 라는 Date 객체는 하루가 지난 날짜를 가리키도록 세팅된다. (원본 객체가 수정됨)

 

 

참고 링크

https://7942yongdae.tistory.com/40

 

프로젝트 에러 핸들링 링크

https://github.com/codestates-seb/seb39_main_015/issues/166

 

 

 

728x90
반응형

'에러 노트' 카테고리의 다른 글

[React] svg 파일 불러오기가 안 돼요!  (0) 2022.12.02
[React] styled-components에서 background-image 가 안 들어감  (0) 2022.12.02
[HTML] SVG 크기 조절은 어떻게 하죠?  (0) 2022.12.01
[React] 리액트 build 폴더의 index.html 이 브라우저에서 안 떠요!  (1) 2022.12.01
[React] CRA 에서 proxy 가 동작하지 않아요!  (0) 2022.11.30
    '에러 노트' 카테고리의 다른 글
    • [React] svg 파일 불러오기가 안 돼요!
    • [React] styled-components에서 background-image 가 안 들어감
    • [HTML] SVG 크기 조절은 어떻게 하죠?
    • [React] 리액트 build 폴더의 index.html 이 브라우저에서 안 떠요!
    누코(nuuco)
    누코(nuuco)
    👩🏻‍💻 예비 프론트엔드 개발자 😎 글 쓰고, 그림 그리고, 코딩하는 것을 좋아합니다✨

    티스토리툴바