From 0df70210221b9c1f874c7625597fb08bb650d3b2 Mon Sep 17 00:00:00 2001 From: luke Date: Thu, 10 Apr 2025 14:52:35 +0200 Subject: [PATCH 1/2] Add getFirstDayOfYear function --- src/lib/date.spec.ts | 16 ++++++++++++++++ src/lib/date.ts | 9 +++++++++ 2 files changed, 25 insertions(+) diff --git a/src/lib/date.spec.ts b/src/lib/date.spec.ts index c942105..71a1393 100644 --- a/src/lib/date.spec.ts +++ b/src/lib/date.spec.ts @@ -8,6 +8,7 @@ import { getNextBusinessDate, getStartOfDay, getEndOfDay, + getFirstDayOfYear, getLastDayOfYear, } from "./date"; @@ -132,6 +133,21 @@ describe("date tests", () => { expect(getEndOfDay(date).getTime()).toBe(expected.getTime()); }); + test.each([ + [null as unknown as Date, new Date(Number.NaN)], + [undefined as unknown as Date, new Date(Number.NaN)], + [42 as unknown as Date, new Date(Number.NaN)], + ["test" as unknown as Date, new Date(Number.NaN)], + ])("getFirstDayOfYear", (date, expected) => { + expect(getFirstDayOfYear(date).getTime()).toBe(expected.getTime()); + }); + + test("getFirstDayOfYear all days", () => { + for (let date = new Date(2024, 0, 1); date < new Date(2025, 0, 1); date.setDate(date.getDate() + 1)) { + expect(getFirstDayOfYear(date).getTime()).toBe(new Date(2024, 0, 1, 0, 0, 0, 0).getTime()); + } + }); + test.each([ [null as unknown as Date, new Date(Number.NaN)], [undefined as unknown as Date, new Date(Number.NaN)], diff --git a/src/lib/date.ts b/src/lib/date.ts index c185ca7..8039339 100644 --- a/src/lib/date.ts +++ b/src/lib/date.ts @@ -95,6 +95,15 @@ export function getEndOfDay(date: Date): Date { return dateIsValid(date) ? endOfDay(date) : new Date(Number.NaN); } +/** + * Get the first day of a year for the given date + * @param date The date + * @returns The first day of the date year + */ +export function getFirstDayOfYear(date: Date): Date { + return dateIsValid(date) ? new Date(date.getFullYear(), 0, 1) : new Date(Number.NaN); +} + /** * Get the last day of a year for the given date * @param date The date From 90e23df0519ebf18427b0218b61f148bb0566f0e Mon Sep 17 00:00:00 2001 From: luke Date: Thu, 10 Apr 2025 14:57:19 +0200 Subject: [PATCH 2/2] changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4995474..9fe5749 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Unnecessary dev-dependencies +### Added + +- `getFirstDayOfYear` date utility function + ## [1.2.2] - 2025-04-04 ### Changed