From a74bb7f07f9b64cd0ce0a8da71992dc517f3baf4 Mon Sep 17 00:00:00 2001 From: abhimanyurajeesh Date: Tue, 31 Dec 2024 12:28:17 +0530 Subject: [PATCH 1/7] updated the getweek fn --- app/leaderboard/[duration]/Leaderboard.tsx | 9 +++++---- lib/utils.ts | 13 +++++++++++-- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/app/leaderboard/[duration]/Leaderboard.tsx b/app/leaderboard/[duration]/Leaderboard.tsx index 2962f86a..087a6144 100644 --- a/app/leaderboard/[duration]/Leaderboard.tsx +++ b/app/leaderboard/[duration]/Leaderboard.tsx @@ -5,7 +5,7 @@ import { TbZoomQuestion } from "react-icons/tb"; import TopContributor from "../../../components/contributors/TopContributor"; import { calcDateRange, - getWeekNumber, + getWeekNumberAndYear, LeaderboardFilterDurations, } from "@/lib/utils"; import { LeaderboardAPIResponse } from "@/lib/types"; @@ -24,6 +24,8 @@ import { BiGitPullRequest } from "react-icons/bi"; import { GoIssueOpened, GoIssueClosed } from "react-icons/go"; import { VscGitPullRequestClosed } from "react-icons/vsc"; +const { weekNumber, weekYear } = getWeekNumberAndYear(new Date()); + const filterBySearchTerm = (searchTermLC: string) => { return (item: LeaderboardAPIResponse[number]) => item.user.name.toLowerCase().includes(searchTermLC) || @@ -307,9 +309,8 @@ export default function Leaderboard(props: Props) { ) : ( - Live Leaderboard of last 7 days | Week{" "} - {getWeekNumber(new Date())} of{" "} - {new Date().getFullYear()} + Live Leaderboard of last 7 days | Week {weekNumber} of{" "} + {weekYear} )} diff --git a/lib/utils.ts b/lib/utils.ts index 7cf484a5..0e22b707 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -16,12 +16,21 @@ export const formatDuration = (duration_in_ms: number) => .splice(0, 4) .join(" "); -export const getWeekNumber = (date: Date) => { +export const getWeekNumberAndYear = (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); + + const weekNumber = Math.ceil(((Number(d) - Number(yearStart)) / 86400000 + 1) / 7); + + const weekYear = d.getUTCFullYear(); + if (d < yearStart) { + return { weekNumber: 52, weekYear: weekYear - 1 }; + } else if (d >= new Date(Date.UTC(d.getUTCFullYear(), 11, 29))) { + return { weekNumber: 1, weekYear: weekYear + 1 }; + } + return { weekNumber, weekYear }; }; const now = new Date(); From 1cbe3f1fd991066a0737632623ffb384f4871610 Mon Sep 17 00:00:00 2001 From: abhimanyurajeesh Date: Tue, 31 Dec 2024 12:30:11 +0530 Subject: [PATCH 2/7] updated getweek function --- lib/utils.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/utils.ts b/lib/utils.ts index 0e22b707..a799f020 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -21,12 +21,13 @@ export const getWeekNumberAndYear = (date: Date) => { const dayNum = d.getUTCDay() || 7; d.setUTCDate(d.getUTCDate() + 4 - dayNum); const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1)); - - const weekNumber = Math.ceil(((Number(d) - Number(yearStart)) / 86400000 + 1) / 7); + const weekNumber = Math.ceil( + ((Number(d) - Number(yearStart)) / 86400000 + 1) / 7, + ); const weekYear = d.getUTCFullYear(); if (d < yearStart) { - return { weekNumber: 52, weekYear: weekYear - 1 }; + return { weekNumber: 52, weekYear: weekYear - 1 }; } else if (d >= new Date(Date.UTC(d.getUTCFullYear(), 11, 29))) { return { weekNumber: 1, weekYear: weekYear + 1 }; } From cfeb27d2c5e666bd987811f7b2ba0bc94d44d4fb Mon Sep 17 00:00:00 2001 From: abhimanyurajeesh Date: Tue, 31 Dec 2024 14:07:40 +0530 Subject: [PATCH 3/7] Updated the getweek with date-fns --- app/leaderboard/[duration]/Leaderboard.tsx | 1 + lib/utils.ts | 18 ++++-------------- pnpm-lock.yaml | 6 +++--- 3 files changed, 8 insertions(+), 17 deletions(-) diff --git a/app/leaderboard/[duration]/Leaderboard.tsx b/app/leaderboard/[duration]/Leaderboard.tsx index 087a6144..f1e32c54 100644 --- a/app/leaderboard/[duration]/Leaderboard.tsx +++ b/app/leaderboard/[duration]/Leaderboard.tsx @@ -8,6 +8,7 @@ import { getWeekNumberAndYear, LeaderboardFilterDurations, } from "@/lib/utils"; +import { getISOWeek, getISOWeekYear } from 'date-fns'; import { LeaderboardAPIResponse } from "@/lib/types"; import { formatDate } from "@/lib/utils"; import { useState } from "react"; diff --git a/lib/utils.ts b/lib/utils.ts index a799f020..07045420 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -2,6 +2,8 @@ import { formatDuration as _formatDuration, intervalToDuration, format, + getISOWeek, + getISOWeekYear, } from "date-fns"; import { env } from "@/env.mjs"; @@ -17,20 +19,8 @@ export const formatDuration = (duration_in_ms: number) => .join(" "); export const getWeekNumberAndYear = (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)); - const weekNumber = Math.ceil( - ((Number(d) - Number(yearStart)) / 86400000 + 1) / 7, - ); - - const weekYear = d.getUTCFullYear(); - if (d < yearStart) { - return { weekNumber: 52, weekYear: weekYear - 1 }; - } else if (d >= new Date(Date.UTC(d.getUTCFullYear(), 11, 29))) { - return { weekNumber: 1, weekYear: weekYear + 1 }; - } + const weekNumber = getISOWeek(date); + const weekYear = getISOWeekYear(date); return { weekNumber, weekYear }; }; 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 From c7df9706d6f1c19b5f72e2745673ce0794be3888 Mon Sep 17 00:00:00 2001 From: abhimanyurajeesh Date: Tue, 31 Dec 2024 14:08:36 +0530 Subject: [PATCH 4/7] updated getWeekNumberAndYear --- app/leaderboard/[duration]/Leaderboard.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/app/leaderboard/[duration]/Leaderboard.tsx b/app/leaderboard/[duration]/Leaderboard.tsx index f1e32c54..087a6144 100644 --- a/app/leaderboard/[duration]/Leaderboard.tsx +++ b/app/leaderboard/[duration]/Leaderboard.tsx @@ -8,7 +8,6 @@ import { getWeekNumberAndYear, LeaderboardFilterDurations, } from "@/lib/utils"; -import { getISOWeek, getISOWeekYear } from 'date-fns'; import { LeaderboardAPIResponse } from "@/lib/types"; import { formatDate } from "@/lib/utils"; import { useState } from "react"; From 8beed6e4c10c0014cec46997e1531cd51770e845 Mon Sep 17 00:00:00 2001 From: abhimanyurajeesh Date: Tue, 31 Dec 2024 18:13:26 +0530 Subject: [PATCH 5/7] without ISO format --- app/leaderboard/[duration]/Leaderboard.tsx | 9 ++++----- lib/utils.ts | 17 +++++++++++++---- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/app/leaderboard/[duration]/Leaderboard.tsx b/app/leaderboard/[duration]/Leaderboard.tsx index 087a6144..2962f86a 100644 --- a/app/leaderboard/[duration]/Leaderboard.tsx +++ b/app/leaderboard/[duration]/Leaderboard.tsx @@ -5,7 +5,7 @@ import { TbZoomQuestion } from "react-icons/tb"; import TopContributor from "../../../components/contributors/TopContributor"; import { calcDateRange, - getWeekNumberAndYear, + getWeekNumber, LeaderboardFilterDurations, } from "@/lib/utils"; import { LeaderboardAPIResponse } from "@/lib/types"; @@ -24,8 +24,6 @@ import { BiGitPullRequest } from "react-icons/bi"; import { GoIssueOpened, GoIssueClosed } from "react-icons/go"; import { VscGitPullRequestClosed } from "react-icons/vsc"; -const { weekNumber, weekYear } = getWeekNumberAndYear(new Date()); - const filterBySearchTerm = (searchTermLC: string) => { return (item: LeaderboardAPIResponse[number]) => item.user.name.toLowerCase().includes(searchTermLC) || @@ -309,8 +307,9 @@ export default function Leaderboard(props: Props) { ) : ( - Live Leaderboard of last 7 days | Week {weekNumber} of{" "} - {weekYear} + Live Leaderboard of last 7 days | Week{" "} + {getWeekNumber(new Date())} of{" "} + {new Date().getFullYear()} )} diff --git a/lib/utils.ts b/lib/utils.ts index 07045420..154c6170 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -3,6 +3,8 @@ import { intervalToDuration, format, getISOWeek, + startOfISOWeek, + addDays, getISOWeekYear, } from "date-fns"; import { env } from "@/env.mjs"; @@ -18,10 +20,17 @@ export const formatDuration = (duration_in_ms: number) => .splice(0, 4) .join(" "); -export const getWeekNumberAndYear = (date: Date) => { - const weekNumber = getISOWeek(date); - const weekYear = getISOWeekYear(date); - return { weekNumber, weekYear }; +export const getWeekNumber = (date: Date) => { + 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); + } + } + return weekNumber; }; const now = new Date(); From 88b18e89adb28e4628ac84a07d4decefa8d6d9de Mon Sep 17 00:00:00 2001 From: abhimanyurajeesh Date: Tue, 31 Dec 2024 20:52:17 +0530 Subject: [PATCH 6/7] updated logic --- lib/utils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/utils.ts b/lib/utils.ts index 154c6170..42f551cf 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -27,9 +27,9 @@ export const getWeekNumber = (date: Date) => { const startOfWeek = startOfISOWeek(date); if (startOfWeek.getFullYear() !== getISOWeekYear(date)) { const lastDayOfLastWeekThisYear = addDays(startOfWeek, -1); - weekNumber = getISOWeek(lastDayOfLastWeekThisYear); - } + weekNumber = getISOWeek(lastDayOfLastWeekThisYear) + 1; } +} return weekNumber; }; From 49ee609886e45e60bf75d40197c2e83538fe6fa2 Mon Sep 17 00:00:00 2001 From: abhimanyurajeesh Date: Tue, 31 Dec 2024 20:52:50 +0530 Subject: [PATCH 7/7] updated logic --- lib/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/utils.ts b/lib/utils.ts index 42f551cf..60f2aaba 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -28,8 +28,8 @@ export const getWeekNumber = (date: Date) => { if (startOfWeek.getFullYear() !== getISOWeekYear(date)) { const lastDayOfLastWeekThisYear = addDays(startOfWeek, -1); weekNumber = getISOWeek(lastDayOfLastWeekThisYear) + 1; + } } -} return weekNumber; };