@kokr/date
Version:
Provides utilities for Korean dates. 날짜 관련 유틸리티를 제공합니다. 공휴일, 절기, 그리고 잡절 정보를 확인하고, 영업일 기준 날짜 계산을 지원합니다.
67 lines (66 loc) • 2.1 kB
JavaScript
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;
;