web developer

[javaScript] 3개월 전 날짜 구하기 / Date 객체의 프로토타입 메서드 확장 본문

JavaScript

[javaScript] 3개월 전 날짜 구하기 / Date 객체의 프로토타입 메서드 확장

trueman 2024. 6. 5. 15:30
728x90
728x90

Date 객체의 모든 인스턴스에서 사용할 수 있는 새로운 메서드 yyyymmdd를 정의해보았다.

Date.prototype.yyyymmdd = function(month) {
    // 현재 날짜에서 month를 뺀 새로운 날짜 생성
    let date = new Date(this);
    date.setMonth(date.getMonth() - month);
    
    // 년, 월, 일 값을 가져와서 두 자리 형식으로 변환
    let yyyy = date.getFullYear().toString();
    let mm = (date.getMonth() + 1).toString().padStart(2, '0');
    let dd = date.getDate().toString().padStart(2, '0');

    // yyyy-mm-dd 형식으로 반환
    return `${yyyy}-${mm}-${dd}`;
}

// 예시 사용
let date = new Date('2024-05-31');
console.log(date.yyyymmdd(3));  // 2024년 5월 31일에서 3개월 전의 날짜 출력
2024-03-02
  1. 2024년 5월 31일에서 3개월 전을 계산하면 3월 2일이 나오는 이유는 Date 객체의 동작 방식 때문입니다.
  2. 5월 31일에서 3개월을 빼면 2월 31일이 되지만, 2월에는 31일이 없으므로, JavaScript는 자동으로 다음 달인 3월 2일로 조정합니다

이를 해결하기 위해서는 날짜를 직접 조정하는 대신, Date 객체의 자동 조정 기능을 활용하여 적절한 결과를 얻을 수 있도록 코드를 약간 수정할 필요가 있습니다. 다음은 이를 해결한 코드입니다:

Date.prototype.yyyymmdd = function(month) {
    // 현재 날짜에서 month를 뺀 새로운 날짜 생성
    let date = new Date(this);
    
    // 현재 날짜의 일 저장
    let day = date.getDate();
    
    // 월을 조정
    date.setMonth(date.getMonth() - month);
    
    // 일 조정: 원래 날짜가 조정된 월의 마지막 날보다 크다면
    if (date.getDate() < day) {
        date.setDate(0); // 해당 월의 마지막 날로 설정
    }
    
    // 년, 월, 일 값을 가져와서 두 자리 형식으로 변환
    let yyyy = date.getFullYear().toString();
    let mm = (date.getMonth() + 1).toString().padStart(2, '0');
    let dd = date.getDate().toString().padStart(2, '0');

    // yyyy-mm-dd 형식으로 반환
    return `${yyyy}-${mm}-${dd}`;
}

// 예시 사용
let date = new Date('2024-05-31');
console.log(date.yyyymmdd(3));  // 2024년 5월 31일에서 3개월 전의 날짜 출력
2024-02-29

 

728x90
728x90
Comments