import { parseISO, differenceInMilliseconds, differenceInSeconds, differenceInMinutes, differenceInHours, differenceInDays, differenceInWeeks, differenceInMonths, differenceInYears } from 'date-fns' import isDate from "../.internal/isDate" const enum DateDiffUnit { Year = "year", Month = "month", Week = "week", Day = "day", Hour = "hour", Minute = "minute", Second = "second", Millisecond = "millisecond" } /** * @module utils */ /** * @name dateDiff * @static * * @description * 두 날짜를 비교하여 차이를 반환합니다. * * @param {Date|Number|String} leftDate - 원래 날짜 * @param {Date|Number|String} rightDate - 비교할 날짜 * @param {String} unit - 비교 단위 * **/ function dateDiff(leftDate: Date | string | number, rightDate: Date | string | number, unit: DateDiffUnit = DateDiffUnit.Second): number { let d1: Date = isDate(leftDate) ? leftDate as Date : parseISO(leftDate as string) let d2: Date = isDate(rightDate) ? rightDate as Date : parseISO(rightDate as string) let diff: number = 0 switch(unit) { case DateDiffUnit.Millisecond: diff = differenceInMilliseconds(d1, d2) break case DateDiffUnit.Second: diff = differenceInSeconds(d1, d2) break case DateDiffUnit.Minute: diff = differenceInMinutes(d1, d2) break case DateDiffUnit.Hour: diff = differenceInHours(d1, d2) break case DateDiffUnit.Day: diff = differenceInDays(d1, d2) break case DateDiffUnit.Week: diff = differenceInWeeks(d1, d2) break case DateDiffUnit.Month: diff = differenceInMonths(d1, d2) break case DateDiffUnit.Year: diff = differenceInYears(d1, d2) break default: break } return diff } export default dateDiff