From 07783d126460d3a9344fa522224645b6b55d68f7 Mon Sep 17 00:00:00 2001 From: Abhimanyu Rajeesh <63541653+abhimanyurajeesh@users.noreply.github.com> Date: Thu, 2 Jan 2025 10:46:47 +0530 Subject: [PATCH] Incorrect Year according to Week Display on Leaderboard (#589) --- lib/utils.ts | 19 ++++++++++++++----- pnpm-lock.yaml | 6 +++--- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/lib/utils.ts b/lib/utils.ts index 7cf484a5..60f2aaba 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -2,6 +2,10 @@ import { formatDuration as _formatDuration, intervalToDuration, format, + getISOWeek, + startOfISOWeek, + addDays, + getISOWeekYear, } from "date-fns"; import { env } from "@/env.mjs"; @@ -17,11 +21,16 @@ export const formatDuration = (duration_in_ms: number) => .join(" "); export const getWeekNumber = (date: Date) => { - const d = new Date(date); - const dayNum = d.getUTCDay() || 7; - d.setUTCDate(d.getUTCDate() + 4 - dayNum); - const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1)); - return Math.ceil(((Number(d) - Number(yearStart)) / 86400000 + 1) / 7); + let weekNumber = getISOWeek(date); + + if (weekNumber === 1 && date.getMonth() === 11) { + const startOfWeek = startOfISOWeek(date); + if (startOfWeek.getFullYear() !== getISOWeekYear(date)) { + const lastDayOfLastWeekThisYear = addDays(startOfWeek, -1); + weekNumber = getISOWeek(lastDayOfLastWeekThisYear) + 1; + } + } + return weekNumber; }; const now = new Date(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7e665397..d9ffef7a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3605,7 +3605,7 @@ snapshots: debug: 4.3.5(supports-color@8.1.1) enhanced-resolve: 5.17.1 eslint: 8.16.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.16.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.16.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.16.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.16.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.16.0))(eslint@8.16.0))(eslint@8.16.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.16.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.16.0) fast-glob: 3.3.2 get-tsconfig: 4.7.6 @@ -3617,7 +3617,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.16.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.16.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.16.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.16.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.16.0))(eslint@8.16.0))(eslint@8.16.0): dependencies: debug: 3.2.7 optionalDependencies: @@ -3638,7 +3638,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.16.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.16.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.16.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.16.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.16.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.16.0))(eslint@8.16.0))(eslint@8.16.0) hasown: 2.0.2 is-core-module: 2.15.0 is-glob: 4.0.3