import { IBenchmarker } from "../utility"; interface Shift { from: Date | string; to: Date | string; efficiency?: number; } declare type UnitTime = ("week" | "weeks" | "w" | "day" | "days" | "d" | "hour" | "hours" | "h" | "minute" | "minutes" | "m" | "second" | "seconds" | "s" | "millisecond" | "milliseconds" | "ms"); interface IBusinessDay { isBusinessDay(date: Date | string): boolean; businessDayDiff(from: Date | string, to: Date | string, relative?: boolean): number; businessDayAdd(date: Date | string, days: number): Date; businessDaySubtract(date: Date | string, days: number): Date; nextBusinessDay(date: Date | string): Date; prevBusinessDay(date: Date | string): Date; nearestBusinessDay(date: Date | string, direction: 'backwards' | 'forwards'): Date; } interface IWorkingDate { /** * Build all shifts in the day of the given date. It respect the current timezone * @param date */ generateShifts(date: Date | string): Shift[]; /** * Test if the date (datetime) is a working datetime, respect the start or end of the shif in forwards or backwards mode * ``` * ``` * EX: in forwards mode (default) the time '12:30' in [08:30-12:30] shift is not working time * @param date * @param backwards */ isWorkingDate(date: Date | string, backwards?: boolean): boolean; /** * get the nearest working shift datetime * @param date * @param backwards */ nearestWorkingDate(date: Date | string, backwards?: boolean): Date; /** * Aggiunge alla data 'date' la durata 'duration' rispettando eventuale efficienza se richiesto * @param date data cui aggiungere la durata 'duration' * @param duration durata in 'unit' unità di tempo (secondi di default) * @param withEfficiency booleano, se true rispetta l'efficienza dettata dal calendario * @param unit unità di tempo (secondi di default) */ addTime(date: Date | string, duration: number, withEfficiency?: boolean, unit?: UnitTime, benchmarker?: IBenchmarker): Date; /** * @deprecated Usare addTime * ``` * ``` * Aggiunge alla data 'date' la durata 'duration' rispettando eventuale efficienza se richiesto * @param date data cui aggiungere la durata 'duration' * @param duration durata in minuti * @param withEfficiency booleano, se true rispetta l'efficienza dettata dal calendario */ addMinutes(date: Date | string, duration: number, withEfficiency?: boolean): Date; /** * Calculate the working time between two datetime * @param from * @param to * @param withEfficiency * @param logger * @returns time in **ms** between 'from' and 'to' date */ workingTime(from: Date | string, to: Date | string, withEfficiency?: boolean, logger?: (date: Date, shift: Shift | null, duration: number, startWork?: Date, endWork?: Date) => void): number; } interface IBusinessTime extends IBusinessDay, IWorkingDate { } export { Shift, UnitTime, IBusinessDay, IWorkingDate, IBusinessTime };