From 16b08bc802124e20b0fc248cc842da6a65d9ca35 Mon Sep 17 00:00:00 2001 From: Derek Burgman Date: Sat, 16 Jul 2022 02:33:23 -0500 Subject: [PATCH] feat: added DayOfWeek functions --- packages/util/src/lib/date/week.spec.ts | 45 +++++++++++++++++++++++++ packages/util/src/lib/date/week.ts | 24 +++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 packages/util/src/lib/date/week.spec.ts diff --git a/packages/util/src/lib/date/week.spec.ts b/packages/util/src/lib/date/week.spec.ts new file mode 100644 index 000000000..b7f35740c --- /dev/null +++ b/packages/util/src/lib/date/week.spec.ts @@ -0,0 +1,45 @@ +import { Day, getDayOffset, getNextDay, getPreviousDay } from './week'; + +describe('getDayOffset()', () => { + it('should return the previous days if a negative value is input.', () => { + expect(getDayOffset(Day.SATURDAY, -1)).toBe(Day.FRIDAY); + expect(getDayOffset(Day.SUNDAY, -1)).toBe(Day.SATURDAY); + }); + + it('should return the next days if a positive value is input.', () => { + expect(getDayOffset(Day.SATURDAY, 1)).toBe(Day.SUNDAY); + expect(getDayOffset(Day.SUNDAY, 1)).toBe(Day.MONDAY); + }); +}); + +describe('getPreviousDay()', () => { + it('should return the previous day', () => { + expect(getPreviousDay(Day.SATURDAY)).toBe(Day.FRIDAY); + expect(getPreviousDay(Day.SUNDAY)).toBe(Day.SATURDAY); + }); + + it('should return the previous days if a negative value is input.', () => { + expect(getPreviousDay(Day.SATURDAY, -1)).toBe(Day.FRIDAY); + expect(getPreviousDay(Day.SUNDAY, -1)).toBe(Day.SATURDAY); + }); + + it('should return the previous days if a positive value is input.', () => { + expect(getPreviousDay(Day.SATURDAY, -1)).toBe(Day.FRIDAY); + expect(getPreviousDay(Day.SUNDAY, -1)).toBe(Day.SATURDAY); + }); + + it('should return the previous days for the number of days input.', () => { + expect(getPreviousDay(Day.SATURDAY, 5)).toBe(Day.MONDAY); + }); +}); + +describe('getNextDay()', () => { + it('should return the next.', () => { + expect(getNextDay(Day.FRIDAY)).toBe(Day.SATURDAY); + expect(getNextDay(Day.SUNDAY)).toBe(Day.MONDAY); + }); + + it('should return the next days for the number of days input.', () => { + expect(getNextDay(Day.FRIDAY, 4)).toBe(Day.TUESDAY); + }); +}); diff --git a/packages/util/src/lib/date/week.ts b/packages/util/src/lib/date/week.ts index 68ef82670..317d90c8a 100644 --- a/packages/util/src/lib/date/week.ts +++ b/packages/util/src/lib/date/week.ts @@ -23,3 +23,27 @@ export enum Day { FRIDAY = 5, SATURDAY = 6 } + +export function getTomorrow(day: DayOfWeek): DayOfWeek { + return getNextDay(day, 1); +} + +export function getDayOffset(day: DayOfWeek, days: number): DayOfWeek { + if (days === 0) { + return day; + } else if (days < 0) { + return getPreviousDay(day, days); + } else { + return getNextDay(day, days); + } +} + +export function getPreviousDay(day: DayOfWeek, days: number = 1): DayOfWeek { + const offset = Math.abs(days) % 7; + const cap = 7 - offset; + return getNextDay(day, cap); +} + +export function getNextDay(day: DayOfWeek, days: number = 1): DayOfWeek { + return Math.abs((day + days) % 7) as DayOfWeek; +}