@modern-kit/utils
Version:
1 lines • 6.79 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../../../src/date/isDateInRange/index.ts"],"sourcesContent":["import { isAfterDate } from '../isAfterDate';\nimport { isBeforeDate } from '../isBeforeDate';\n\ninterface IsDateInRangeParams {\n targetDate?: Date | string | number;\n fromDate?: Date | string | number;\n toDate?: Date | string | number;\n inclusive?: 'both' | 'from' | 'to' | 'none';\n}\n\n/**\n * @description 타겟 날짜가 주어진 날짜 범위 내에 있는지 확인합니다. 타겟 날짜(targetDate)가 없을 경우 `현재 날짜`를 사용합니다.\n *\n * 1. 시작 날짜만 주어 질 경우 타겟 날짜(or 현재 날짜)가 시작 날짜 이후인지 확인합니다.\n * 2. 종료 날짜만 주어 질 경우 타겟 날짜(or 현재 날짜)가 종료 날짜 이전인지 확인합니다.\n * 3. 시작 날짜와 종료 날짜가 모두 주어 질 경우 타겟 날짜(or 현재 날짜)가 시작 날짜와 종료 날짜 사이에 있는지 확인합니다.\n *\n * @param {IsDateInRangeParams} params - 날짜 범위를 지정하는 파라미터 객체\n * @param {Date | string | number} [params.targetDate=new Date()] - 타겟 날짜, 없을 경우 현재 날짜를 사용합니다.\n * @param {Date | string | number} [params.fromDate] - 범위의 시작 날짜\n * @param {Date | string | number} [params.toDate] - 범위의 종료 날짜\n * @param {'both' | 'from' | 'to' | 'none'} [params.inclusive='from'] - 시작 날짜와 종료 날짜의 경계를 포함 할 지 여부를 결정합니다.\n * - 'both': 시작 날짜와 종료 날짜 모두 포함합니다.\n * - 'from': 시작 날짜만 포함합니다. (기본 값)\n * - 'to': 종료 날짜만 포함합니다.\n * - 'none': 시작 날짜와 종료 날짜 모두 포함하지 않습니다.\n * @returns {boolean} 타겟 날짜가 범위 내에 있으면 true, 그렇지 않으면 false를 반환\n * @throws {Error} 유효하지 않은 날짜 형식이 입력된 경우\n *\n * @example\n * // 현재 날짜가 2025년 01월 01일 기준\n * // 타겟 날짜가 있다면 타겟 날짜가 범위 내에 있는지 확인하며, 타겟 날짜가 없다면 현재 날짜가 범위 내에 있는지 확인합니다.\n * isDateInRange({ fromDate: new Date('2024-01-01'), toDate: new Date('2024-12-31') }); // false\n * isDateInRange({ fromDate: '2025-01-01', toDate: '2025-12-31' }); // true\n * isDateInRange({ targetDate: '2025-01-02', fromDate: '2025-01-01', toDate: '2025-01-03' }); // true\n *\n * @example\n * // 현재 날짜가 2025년 01월 01일 기준\n * // 시작 날짜만 지정하여 타겟 날짜(or 현재 날짜)가 시작 날짜 이후인지 확인합니다.\n * isDateInRange({ fromDate: new Date('2025-01-02') }); // true\n * isDateInRange({ fromDate: '2024-12-31' }); // false\n * isDateInRange({ targetDate: '2025-01-02', fromDate: '2025-01-01' }); // true\n *\n * @example\n * // 현재 날짜가 2025년 01월 01일 기준\n * // 종료 날짜만 지정하여 타겟 날짜(or 현재 날짜)가 종료 날짜 이전인지 확인합니다.\n * isDateInRange({ toDate: new Date('2025-01-02') }); // true\n * isDateInRange({ toDate: '2024-12-31' }); // false\n * isDateInRange({ targetDate: '2024-12-31', toDate: '2025-01-01' }); // true\n *\n * @example\n * // 현재 날짜가 2025년 01월 01일 기준\n * // inclusive 옵션에 따른 경계값 포함 여부를 확인합니다.\n * isDateInRange({ fromDate: '2025-01-01', toDate: '2025-01-01', inclusive: 'both' }); // true\n * isDateInRange({ targetDate: '2025-01-01', fromDate: '2025-01-01', toDate: '2025-01-01', inclusive: 'both' }); // true\n *\n * isDateInRange({ fromDate: '2025-01-01', toDate: '2025-01-02', inclusive: 'from' }); // true\n * isDateInRange({ targetDate: '2025-01-01', fromDate: '2025-01-01', toDate: '2025-01-02', inclusive: 'from' }); // true\n *\n * isDateInRange({ fromDate: '2024-12-31', toDate: '2025-01-01', inclusive: 'to' }); // true\n * isDateInRange({ targetDate: '2025-01-01', fromDate: '2024-12-31', toDate: '2025-01-01', inclusive: 'to' }); // true\n *\n * isDateInRange({ fromDate: '2024-12-31', toDate: '2025-01-02', inclusive: 'none' }); // true\n * isDateInRange({ targetDate: '2025-01-01', fromDate: '2024-12-31', toDate: '2025-01-02', inclusive: 'none' }); // true\n */\nexport function isDateInRange({\n targetDate = new Date(),\n fromDate,\n toDate,\n inclusive = 'from',\n}: IsDateInRangeParams): boolean {\n // 날짜 비교 내부 함수\n const compareDate = (\n date: Date | string | number,\n type: 'from' | 'to'\n ): boolean => {\n const isFrom = type === 'from';\n const inclusiveToUse =\n inclusive === 'both' ||\n (isFrom ? inclusive === 'from' : inclusive === 'to');\n const compareFunc = isFrom ? isAfterDate : isBeforeDate;\n\n return compareFunc({\n targetDate,\n compareDate: date,\n inclusive: inclusiveToUse,\n });\n };\n\n // 1. 시작 날짜만 주어 질 경우 타겟 날짜(or 현재 날짜)가 시작 날짜 이후인지 확인\n if (fromDate && !toDate) {\n return compareDate(fromDate, 'from');\n }\n\n // 2. 종료 날짜만 주어 질 경우 타겟 날짜(or 현재 날짜)가 종료 날짜 이전인지 확인\n if (!fromDate && toDate) {\n return compareDate(toDate, 'to');\n }\n\n // 3. 시작 날짜와 종료 날짜가 모두 주어 질 경우 타겟 날짜(or 현재 날짜)가 시작 날짜와 종료 날짜 사이에 있는지 확인\n if (fromDate && toDate) {\n if (isAfterDate({ targetDate: fromDate, compareDate: toDate })) {\n throw new Error('fromDate가 toDate보다 늦을 수 없습니다.');\n }\n\n return compareDate(fromDate, 'from') && compareDate(toDate, 'to');\n }\n\n throw new Error('fromDate 혹은 toDate 중 하나는 필요합니다.');\n}\n"],"names":["isAfterDate","isBeforeDate"],"mappings":";;;;;;;AAiEO,SAAS,aAAA,CAAc;AAAA,EAC5B,UAAA,uBAAiB,IAAA,EAAK;AAAA,EACtB,QAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAAiC;AAE/B,EAAA,MAAM,WAAA,GAAc,CAClB,IAAA,EACA,IAAA,KACY;AACZ,IAAA,MAAM,SAAS,IAAA,KAAS,MAAA;AACxB,IAAA,MAAM,iBACJ,SAAA,KAAc,MAAA,KACb,MAAA,GAAS,SAAA,KAAc,SAAS,SAAA,KAAc,IAAA,CAAA;AACjD,IAAA,MAAM,WAAA,GAAc,SAASA,2BAAA,GAAcC,6BAAA;AAE3C,IAAA,OAAO,WAAA,CAAY;AAAA,MACjB,UAAA;AAAA,MACA,WAAA,EAAa,IAAA;AAAA,MACb,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH,CAAA;AAGA,EAAA,IAAI,QAAA,IAAY,CAAC,MAAA,EAAQ;AACvB,IAAA,OAAO,WAAA,CAAY,UAAU,MAAM,CAAA;AAAA,EACrC;AAGA,EAAA,IAAI,CAAC,YAAY,MAAA,EAAQ;AACvB,IAAA,OAAO,WAAA,CAAY,QAAQ,IAAI,CAAA;AAAA,EACjC;AAGA,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,IAAID,4BAAY,EAAE,UAAA,EAAY,UAAU,WAAA,EAAa,MAAA,EAAQ,CAAA,EAAG;AAC9D,MAAA,MAAM,IAAI,MAAM,iFAA+B,CAAA;AAAA,IACjD;AAEA,IAAA,OAAO,YAAY,QAAA,EAAU,MAAM,CAAA,IAAK,WAAA,CAAY,QAAQ,IAAI,CAAA;AAAA,EAClE;AAEA,EAAA,MAAM,IAAI,MAAM,wFAAiC,CAAA;AACnD;;;;"}