business-time-calculator
Version:
Business Time Calculator is a simple tool to calculate the business time between two dates.
74 lines (73 loc) • 2.81 kB
TypeScript
import { DateTime } from 'luxon';
export type DayOfWeek = 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday';
export type Holiday = `${3 | 2 | 1 | 0}${number}/${1 | 0}${number}`;
export declare class BusinessTime {
private businessTimezone;
private businessDays;
private holidays;
private startOfDayTime;
private endOfDayTime;
static computeWorkingHours: (startHour: number, endHour: number) => number;
constructor({ businessTimezone, businessDays, businessHours, holidays, }: {
businessTimezone: string;
businessDays: DayOfWeek[];
businessHours: number[];
holidays: Holiday[];
});
computeWorkingHours: () => number;
isBusinessDay(datetime: DateTime): boolean;
computeBusinessDaysInInterval({ start, end, }: {
start: DateTime;
end: DateTime;
}): number;
computeBusinessHoursInInterval({ start, end, }: {
start: DateTime;
end: DateTime;
}): number;
computeBusinessMinutesInInterval({ start, end, }: {
start: DateTime;
end: DateTime;
}): number;
computeBusinessSecondsInInterval({ start, end, }: {
start: DateTime;
end: DateTime;
}): number;
computeBusinessTimeInInterval({ start, end, unit, }: {
start: DateTime;
end: DateTime;
unit: 'hours' | 'minutes' | 'seconds';
}): number;
/**
* Move the date in a business time (moveBehind = false)
* e.g. 06:00 => 10:00 of the current day
* e.g. 22:00 => 10:00 of the next day
*
* Move the date in a business time (moveBehind = true)
* e.g. 06:00 => 19:00 of the previous day
* e.g. 22:00 => 19:00 of the current day
*
* Warning ⚠️ _moveDateInBusinessTime doesn't retain the original timezone of the datetime in input, but it returns a datetime with the same timezone used to compute business times.
* It follows that behaviour because this method should be private and used only as helper. It is public only for testing purpose.
*/
_moveDateInBusinessTime({ datetime, moveBehind, }: {
datetime: DateTime;
moveBehind?: boolean;
}): DateTime<true> | DateTime<false>;
addBusinessHoursToDate({ datetime, hours, }: {
datetime: DateTime;
hours: number;
}): DateTime<boolean>;
addBusinessSecondsToDate({ datetime, seconds, }: {
datetime: DateTime;
seconds: number;
}): DateTime<boolean>;
removeBusinessHoursFromDate({ datetime, hours, }: {
datetime: DateTime;
hours: number;
}): DateTime<boolean>;
removeBusinessSecondsFromDate({ datetime, seconds, }: {
datetime: DateTime;
seconds: number;
}): DateTime<boolean>;
hoursToDays(hours: number): number;
}