import moment, { Moment, unitOfTime } from 'moment'; interface WeekConfig { hours?: string[] | boolean; days: [ 0 | 1 | string[], 0 | 1 | string[], 0 | 1 | string[], 0 | 1 | string[], 0 | 1 | string[], 0 | 1 | string[], 0 | 1 | string[] ]; efficiency?: [ number[], number[], number[], number[], number[], number[], number[] ]; } interface CustomWeek extends WeekConfig { from: Date | moment.Moment | string; to: Date | moment.Moment | string; } interface Worktime extends WeekConfig { customWeeks?: { [key: string]: CustomWeek; }; holidays?: string[]; } interface Shift { from: moment.Moment; to: moment.Moment; efficiency: number; } interface BusinessDay { isBusinessDay(date: moment.Moment | Date | string): boolean; businessDiff(from: moment.Moment | Date | string, to: moment.Moment | Date | string, relative?: boolean): number; businessAdd(date: moment.Moment | Date | string, days: number): moment.Moment; businessSubtract(date: moment.Moment | Date | string, days: number): moment.Moment; nextBusinessDay(date: moment.Moment | Date | string): moment.Moment; prevBusinessDay(date: moment.Moment | Date | string): moment.Moment; } declare class BusinessTime implements BusinessDay { private worktime; private _normalizzeWeekConfig; private _normalizeShifts; constructor(worktime: Worktime); private _getWeekConfig; private _toDateTimeShift; _createShiftsForDate: (date: moment.Moment) => Shift[]; private _isWorkingDay; isWorkingDay: (date: moment.Moment | Date | string) => boolean; isWorkingDateTime: (date: moment.Moment | Date | string, forward?: boolean) => boolean; getShiftForDate: (date: moment.Moment | Date | string, forward?: boolean) => Shift; /** * Calcola la data/ora lavorativa più vicina * * ATTENZIONE: Per evitare ricerche infinite, assicurarsi di aver definito almeno un giorno lavorativo di default * @param date data/ora da cui partire * @param forward true in avanti, false indietro [true di default] * @returns la prima data lavorativa */ nearestWorkingDateTime: (date: moment.Moment | Date | string, forward?: boolean) => moment.Moment; minutesForDays: { [key: string]: number; }; private _logAddMinutes; /** * Add minutes to date respecting calendars * @param date * @param duration positive o negative value * @param withEfficiency include efficiency (default true) * @returns new moment date */ addMinutes: (date: moment.Moment | Date | string, duration: number, withEfficiency?: boolean) => moment.Moment; add: (date: moment.Moment | Date | string, duration: number, withEfficiency?: boolean, unit?: unitOfTime.DurationConstructor | undefined) => moment.Moment; workedDays: { [key: string]: number; }; private _logTimeFly; /** * Calculate the working time between two date in minutes. * @param from moment.Moment | Date * @param to moment.Moment | Date * @param withEfficiency include efficiency (default true) * @returns working minutes number */ workingTimeOld: (from: moment.Moment | Date | string, to: moment.Moment | Date | string, withEfficiency?: boolean) => number; /** * Calculate the working time between two date in minutes. * @param from moment.Moment | Date * @param to moment.Moment | Date * @param withEfficiency include efficiency (default true) * @param logger logger function to trace caculation * @returns working minutes number */ workingTime: (from: moment.Moment | Date | string, to: moment.Moment | Date | string, withEfficiency?: boolean, logger?: ((date: moment.Moment, shift: Shift | null, duration: number, startWork?: moment.Moment, endWork?: moment.Moment) => void) | undefined) => number; /** * Check if the 'date' is a working day * @param date the date to be tested * @returns true or false */ isBusinessDay: (date: moment.Moment | Date | string) => boolean; businessAdd: (date: moment.Moment | Date | string, days: number) => moment.Moment; businessSubtract: (date: moment.Moment | Date | string, days: number) => moment.Moment; businessDiff: (from: moment.Moment | Date | string, to: moment.Moment | Date | string, relative?: boolean) => number; nextBusinessDay: (date: moment.Moment | Date | string) => moment.Moment; prevBusinessDay: (date: moment.Moment | Date | string) => moment.Moment; } export { BusinessTime };