@burglekitt/gmt
Version:
Temporal-based date and time utilities with timezone support and polyfill integration
36 lines (35 loc) • 1.26 kB
JavaScript
import { Temporal } from "@js-temporal/polyfill";
import { advanceBusinessDays, isValidAmount } from "../../internal/index.js";
import { isValidDate } from "../validate/index.js";
/**
* Return a PlainDate ISO string with `amount` business days added to `value`.
*
* - Uses fixed ISO Monday–Friday business days (no locale awareness).
* - Saturday and Sunday are skipped during the count.
* - Returns "" on invalid input.
*
* @param value ISO PlainDate string
* @param amount number of business days to add
* @returns ISO PlainDate string after adding business days, or "" on invalid input
*
* @example addBusinessDays("2024-03-15", 1) // "2024-03-18"
* @example addBusinessDays("2024-03-16", 1) // "2024-03-18"
* @example addBusinessDays("2024-03-15", 0) // "2024-03-15"
* @example addBusinessDays("invalid", 1) // ""
*/
export function addBusinessDays(value, amount) {
if (!isValidDate(value) || !isValidAmount(amount)) {
return "";
}
if (amount === 0) {
return value;
}
try {
const date = Temporal.PlainDate.from(value);
const direction = amount > 0 ? 1 : -1;
return advanceBusinessDays(date, direction, Math.abs(amount)).toString();
}
catch {
return "";
}
}