import moment from 'moment'; import { TimeUnits } from '../enums'; import { ProgressExpiration, ProgressExpirationTitle } from '../models'; export class ProgressExpirationHelper { // Default value type and theme static initializeConfigDefaults( config: ProgressExpiration ): ProgressExpiration { config.startDate = config.startDate ?? new Date(); config.type = config.type ?? 'small'; config.theme = config.theme ?? 'light'; return config; } // total days between start, expire, and optionally completed date static calculateTotalDays( startDate: Date, expireDate: Date, completedDate?: Date ): number { if (completedDate) { return moment .utc(expireDate) .diff(moment.utc(completedDate), TimeUnits.DAYS); } else { return moment.utc(expireDate).diff(moment.utc(startDate), TimeUnits.DAYS); } } // Left days static calculateLeftDays(expireDate: Date, completedDate?: Date): number { const today = moment().utc(); const expireMoment = moment.utc(expireDate); const completedMoment = completedDate ? moment.utc(completedDate) : null; if (completedMoment && completedMoment.isBefore(expireMoment)) { return expireMoment.diff(completedMoment, TimeUnits.DAYS); } else if (completedMoment && completedMoment.isSame(expireMoment)) { return 0; } else if (completedMoment && completedMoment.isAfter(expireMoment)) { return expireMoment.diff(completedMoment, TimeUnits.DAYS); } return expireMoment.diff(today, TimeUnits.DAYS); } // Hours between start and expire date static calculateHours(expireDate: Date, startDate: Date): number { const startDay = moment(startDate); const expireDay = moment(expireDate); return expireDay.diff(startDay, TimeUnits.HOURS); } // The number of days in the current month static calculateDaysInCurrentMonth(): number { const today = new Date(); const year = today.getFullYear(); const month = today.getMonth(); return new Date(year, month + 1, 0).getDate(); } }