diff --git a/app/features/calendar/routes/calendar.tsx b/app/features/calendar/routes/calendar.tsx index d81e69556..d0d702ec1 100644 --- a/app/features/calendar/routes/calendar.tsx +++ b/app/features/calendar/routes/calendar.tsx @@ -25,6 +25,7 @@ import { joinListToNaturalString } from "~/utils/arrays"; import { databaseTimestampToDate, dateToThisWeeksMonday, + dateToThisWeeksSunday, dateToWeekNumber, dayToWeekStartsAtMondayDay, getWeekStartsAtMondayDay, @@ -116,6 +117,7 @@ export const loader = async ({ request }: LoaderFunctionArgs) => { }); const mondayDate = dateToThisWeeksMonday(new Date()); + const sundayDate = dateToThisWeeksSunday(new Date()); const currentWeek = dateToWeekNumber(mondayDate); const displayedWeek = parsedWeekParams.success @@ -123,7 +125,9 @@ export const loader = async ({ request }: LoaderFunctionArgs) => { : currentWeek; const displayedYear = parsedWeekParams.success ? parsedWeekParams.data.year - : mondayDate.getFullYear(); + : currentWeek === 1 // handle first week of the year special case + ? sundayDate.getFullYear() + : mondayDate.getFullYear(); const tagsToFilterBy = parsedFilterParams.success ? (parsedFilterParams.data.tags as PersistedCalendarEventTag[]) : []; diff --git a/app/utils/dates.ts b/app/utils/dates.ts index 4e88e0f05..7fd8b09ff 100644 --- a/app/utils/dates.ts +++ b/app/utils/dates.ts @@ -32,6 +32,16 @@ export function dateToThisWeeksMonday(date: Date) { return copiedDate; } +export function dateToThisWeeksSunday(date: Date) { + const copiedDate = new Date(date.getTime()); + + while (copiedDate.getDay() !== 0) { + copiedDate.setDate(copiedDate.getDate() + 1); + } + + return copiedDate; +} + export function getWeekStartsAtMondayDay(date: Date) { const currentDay = date.getDay();