
😎풀이
- 윤년을 계산하는 헬퍼 함수를 만든다.
1-1. 윤년은 4로 나누어 떨어지면서, 100으로 나누어 떨어지지 않는 해를 의미한다.
1-2. 윤년은 400으로 나누어 떨어지는 해를 의미한다.
- 1971년부터 현재까지의 날짜를 세는 헬퍼 함수를 만든다.
2-1. YYYY-mm-DD
형식을 입력받아 숫자형으로 변환한다.
2-2. 1971년부터 작년까지 윤년이라면 366일, 아니라면 365일을 더한다.
2-3. 올 해의 지나온 달의 일수를 추가한다. 윤년일 경우 2월은 하루를 더 더 한다.
2-4. 해당 날짜의 일 수를 반환한다.
- 두 날짜의 일 수의 차이를 반환한다.
const DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
function daysBetweenDates(date1: string, date2: string): number {
return Math.abs(countDays(date1) - countDays(date2))
}
function countDays(date: string) {
const [year, month, day] = date.split('-').map(Number)
let days = 0
for(let curYear = 1971; curYear < year; curYear++) {
days += 365
if(isLeapYear(curYear)) days++
}
for(let curMonth = 1; curMonth < month; curMonth++) {
days += DAYS[curMonth - 1]
if(curMonth === 2 && isLeapYear(year)) days++
}
days += day
return days
}
function isLeapYear(year: number) {
if(year % 4 === 0 && year % 100 !== 0) return true
if(year % 400 === 0) return true
return false
}