Skip to content

Commit 64ce293

Browse files
authored
Add more date utilities (#51)
1 parent 072acf3 commit 64ce293

File tree

3 files changed

+73
-1
lines changed

3 files changed

+73
-1
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
### Added
11+
12+
- `getStartOfDay`, `getEndOfDay` and `getLastDayOfYear` date utility functions
13+
1014
## [1.1.0] - 2024-10-17
1115

1216
- export `boolean` utilities

src/lib/date.spec.ts

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ import {
66
dateIsWeekend,
77
dateDifferenceInDays,
88
getNextBusinessDate,
9+
getStartOfDay,
10+
getEndOfDay,
11+
getLastDayOfYear,
912
} from "./date";
1013

1114
describe("date tests", () => {
@@ -106,6 +109,41 @@ describe("date tests", () => {
106109
[42 as unknown as Date, new Date(Number.NaN)],
107110
["test" as unknown as Date, new Date(Number.NaN)],
108111
])("getNextBusinessDate", (date, expected) => {
109-
expect(getNextBusinessDate(date).getDate()).toBe(expected.getDate());
112+
expect(getNextBusinessDate(date).getTime()).toBe(expected.getTime());
113+
});
114+
115+
test.each([
116+
[new Date(2024, 0, 1, 12, 45, 25, 333), new Date(2024, 0, 1, 0, 0, 0, 0)],
117+
[null as unknown as Date, new Date(Number.NaN)],
118+
[undefined as unknown as Date, new Date(Number.NaN)],
119+
[42 as unknown as Date, new Date(Number.NaN)],
120+
["test" as unknown as Date, new Date(Number.NaN)],
121+
])("getStartOfDay", (date, expected) => {
122+
expect(getStartOfDay(date).getTime()).toBe(expected.getTime());
123+
});
124+
125+
test.each([
126+
[new Date(2024, 0, 1, 12, 45, 25, 333), new Date(2024, 0, 1, 23, 59, 59, 999)],
127+
[null as unknown as Date, new Date(Number.NaN)],
128+
[undefined as unknown as Date, new Date(Number.NaN)],
129+
[42 as unknown as Date, new Date(Number.NaN)],
130+
["test" as unknown as Date, new Date(Number.NaN)],
131+
])("getEndOfDay", (date, expected) => {
132+
expect(getEndOfDay(date).getTime()).toBe(expected.getTime());
133+
});
134+
135+
test.each([
136+
[null as unknown as Date, new Date(Number.NaN)],
137+
[undefined as unknown as Date, new Date(Number.NaN)],
138+
[42 as unknown as Date, new Date(Number.NaN)],
139+
["test" as unknown as Date, new Date(Number.NaN)],
140+
])("getLastDayOfYear", (date, expected) => {
141+
expect(getLastDayOfYear(date).getTime()).toBe(expected.getTime());
142+
});
143+
144+
test("getLastDayOfYear all days", () => {
145+
for (let date = new Date(2024, 0, 1); date < new Date(2025, 0, 1); date.setDate(date.getDate() + 1)) {
146+
expect(getLastDayOfYear(date).getTime()).toBe(new Date(2024, 11, 31, 0, 0, 0, 0).getTime());
147+
}
110148
});
111149
});

src/lib/date.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ import {
77
isWeekend,
88
differenceInCalendarDays,
99
addBusinessDays,
10+
startOfDay,
11+
endOfDay,
12+
lastDayOfYear,
1013
} from "date-fns";
1114

1215
/**
@@ -73,3 +76,30 @@ export function dateDifferenceInDays(from: Date, to: Date): number {
7376
export function getNextBusinessDate(date: Date): Date {
7477
return dateIsValid(date) ? addBusinessDays(date, 1) : new Date(Number.NaN);
7578
}
79+
80+
/**
81+
* Get the start of a day for the given date
82+
* @param date The date
83+
* @returns The start of a day date
84+
*/
85+
export function getStartOfDay(date: Date): Date {
86+
return dateIsValid(date) ? startOfDay(date) : new Date(Number.NaN);
87+
}
88+
89+
/**
90+
* Get the end of a day for the given date
91+
* @param date The date
92+
* @returns The end of a day date
93+
*/
94+
export function getEndOfDay(date: Date): Date {
95+
return dateIsValid(date) ? endOfDay(date) : new Date(Number.NaN);
96+
}
97+
98+
/**
99+
* Get the last day of a year for the given date
100+
* @param date The date
101+
* @returns The last day of the date year
102+
*/
103+
export function getLastDayOfYear(date: Date): Date {
104+
return dateIsValid(date) ? lastDayOfYear(date) : new Date(Number.NaN);
105+
}

0 commit comments

Comments
 (0)