Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 일수를 년·월·주·일 단위로 변환하는 방법

문제 개요

JavaScript에서 특정 일수를 나타내는 숫자를 입력받아, 이를 년(years), 월(months), 주(weeks), 일(days) 네 가지 속성으로 구성된 객체로 변환하는 함수를 작성해야 합니다.

단, 이 문제에서는 윤년을 고려하지 않으며, 모든 해는 365일로 간주합니다.

예를 들어 입력값이 738이라면, 출력은 다음과 같아야 합니다.

const output = {
    years: 2,
    months: 0,
    weeks: 1,
    days: 1
}

구현 예제: 반복문 활용

가장 직관적인 방법은 while 반복문을 사용하여 남은 일수에서 큰 단위부터 차례대로 빼가는 것입니다.

const days = 738;

const calculateTimimg = d => {
    let months = 0, years = 0, days = 0, weeks = 0;
    while(d){
        if(d >= 365){
            years++;
            d -= 365;
        }else if(d >= 30){
            months++;
            d -= 30;
        }else if(d >= 7){
            weeks++;
            d -= 7;
        }else{
            days++;
            d--;
        }
    };
    return {
        years, months, weeks, days
    };
};

console.log(calculateTimimg(days));

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다.

{ years: 2, months: 0, weeks: 1, days: 1 }

개선된 접근: 나눗셈과 나머지 연산 활용

반복문 대신 나눗셈(/)과 나머지 연산자(%)를 사용하면 코드를 더 간결하고 효율적으로 만들 수 있습니다. 일수가 아무리 커도 상수 시간 안에 계산이 완료됩니다.

const calculateTiming = d => {
    const years = Math.floor(d / 365);
    d %= 365;

    const months = Math.floor(d / 30);
    d %= 30;

    const weeks = Math.floor(d / 7);
    const days = d % 7;

    return { years, months, weeks, days };
};

console.log(calculateTiming(738));
// { years: 2, months: 0, weeks: 1, days: 1 }

Math.floor()로 해당 단위의 몫을 구하고, 나머지 연산으로 남은 일수를 갱신하는 방식입니다. 두 방법 모두 동일한 결과를 반환하며, 실무에서는 후자의 방식이 성능과 가독성 면에서 더 권장됩니다.