From 7ad117d7ddd97f963cd93409c0dbb4f8c77f72b0 Mon Sep 17 00:00:00 2001 From: Arya Kesarwani Date: Fri, 30 Oct 2026 02:21:54 +0530 Subject: [PATCH] fix(web): show 1y ago instead of 0y ago for year-old comments --- .../__tests__/unit/activity-time-ago.test.ts | 34 +++++++++++++++++++ .../_components/tabs/Activity/utils.ts | 3 +- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 apps/web/__tests__/unit/activity-time-ago.test.ts diff --git a/apps/web/__tests__/unit/activity-time-ago.test.ts b/apps/web/__tests__/unit/activity-time-ago.test.ts new file mode 100644 index 00000000000..8571b70c56d --- /dev/null +++ b/apps/web/__tests__/unit/activity-time-ago.test.ts @@ -0,0 +1,34 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { formatTimeAgo } from "@/app/s/[videoId]/_components/tabs/Activity/utils"; + +const NOW = new Date("2026-10-30T12:00:00Z"); +const daysAgo = (days: number) => + new Date(NOW.getTime() - days * 24 * 60 * 60 * 1000); + +describe("formatTimeAgo", () => { + beforeEach(() => { + vi.useFakeTimers(); + vi.setSystemTime(NOW); + }); + + afterEach(() => { + vi.useRealTimers(); + }); + + it("shows months until twelve thirty-day months have passed", () => { + expect(formatTimeAgo(daysAgo(30))).toBe("1mo ago"); + expect(formatTimeAgo(daysAgo(359))).toBe("11mo ago"); + }); + + it("never shows zero years between 360 and 364 days", () => { + for (const days of [360, 362, 364]) { + expect(formatTimeAgo(daysAgo(days))).toBe("1y ago"); + } + }); + + it("counts whole years after that", () => { + expect(formatTimeAgo(daysAgo(365))).toBe("1y ago"); + expect(formatTimeAgo(daysAgo(729))).toBe("1y ago"); + expect(formatTimeAgo(daysAgo(730))).toBe("2y ago"); + }); +}); diff --git a/apps/web/app/s/[videoId]/_components/tabs/Activity/utils.ts b/apps/web/app/s/[videoId]/_components/tabs/Activity/utils.ts index 22948a0b584..7f7afd68206 100644 --- a/apps/web/app/s/[videoId]/_components/tabs/Activity/utils.ts +++ b/apps/web/app/s/[videoId]/_components/tabs/Activity/utils.ts @@ -27,6 +27,7 @@ export const formatTimeAgo = (date: Date) => { const diffInMonths = Math.floor(diffInDays / 30); if (diffInMonths < 12) return `${diffInMonths}mo ago`; - const diffInYears = Math.floor(diffInDays / 365); + // 12 thirty-day months is 360 days, five days short of a 365-day year. + const diffInYears = Math.max(1, Math.floor(diffInDays / 365)); return `${diffInYears}y ago`; };