UNPKG

@kokr/date

Version:

Provides utilities for Korean dates. 날짜 관련 유틸리티를 제공합니다. 공휴일, 절기, 그리고 잡절 정보를 확인하고, 영업일 기준 날짜 계산을 지원합니다.

67 lines (66 loc) 2.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getNextBusinessDay = exports.isHoliday = exports.getHolidays = void 0; const cache_js_1 = require("./cache.js"); const holiday_js_1 = require("./holiday.js"); /** * 서버에서 공휴일 관련 정보를 가져옵니다. / Get Holidays from Http Server * @type {(year: number) => Promise<_DateInfo[]>} * @param {number} year * @return {Promise<_DateInfo[]>} */ exports.getHolidays = (0, cache_js_1.cache)(holiday_js_1.getHolidaysFromHttp); function format(date) { const year = date.getFullYear(); const month = date.getMonth() + 1; const day = date.getDate(); return [ year, month >= 10 ? month : `0${month}`, day >= 10 ? day : `0${day}`, ].join("-"); } async function _isHoliday(d) { const dayOfWeek = d.getDay(); if (dayOfWeek === 0 || dayOfWeek === 6) { return true; } const formattedDate = format(d); const holidays = await (0, exports.getHolidays)(d.getFullYear()); const found = holidays.find((holiday) => holiday.date === formattedDate); return !!found?.holiday; } /** * 공휴일인지 아닌지 판단 / return is holiday * @param {string} date YYYY-MM-DD * @return {Promise<boolean>} */ function isHoliday(date) { return _isHoliday(new Date(date)); } exports.isHoliday = isHoliday; /** * 영업일 기준 n일 후 반환 / After n business days * @param {string} date YYYY-MM-DD 형식 * @param {number} daysAfter n일, 양수 음수 모두 사용 가능 * @returns {string} YYYY-MM-DD */ async function getNextBusinessDay(date, daysAfter) { const d = new Date(date); while (daysAfter !== 0) { if (daysAfter > 0) { do { d.setDate(d.getDate() + 1); } while (await _isHoliday(d)); daysAfter--; } else { do { d.setDate(d.getDate() - 1); } while (await _isHoliday(d)); daysAfter++; } } return format(d); } exports.getNextBusinessDay = getNextBusinessDay;