From 405fdf297cf5d57e499a600253741bfdd891cdd2 Mon Sep 17 00:00:00 2001 From: Alex Lebens Date: Thu, 12 Mar 2026 12:35:23 -0500 Subject: [PATCH] feat: replace timeago with dayjs --- bun.lock | 3 ++ package.json | 1 + src/components/cards/CategoryCard.astro | 8 +++-- src/components/sections/CategorySection.astro | 6 ++-- src/support/time.ts | 35 ++++--------------- 5 files changed, 19 insertions(+), 34 deletions(-) diff --git a/bun.lock b/bun.lock index 63b203e..83ce061 100644 --- a/bun.lock +++ b/bun.lock @@ -23,6 +23,7 @@ "@types/unist": "^3.0.3", "astro": "^6.0.2", "astro-icon": "^1.1.5", + "dayjs": "^1.11.20", "markdown-it": "^14.1.1", "marked": "^17.0.4", "marked-shiki": "^1.2.1", @@ -1034,6 +1035,8 @@ "datatables.net-dt": ["datatables.net-dt@2.3.7", "", { "dependencies": { "datatables.net": "2.3.7", "jquery": "4.0.0" } }, "sha512-OXXIliY5MXnI+284Gt73F+fEdnW2u5y9jiptlvjDDb3YlyqXU4E/YZUB262a068sM/+qakb6RixN1SWn18uF2g=="], + "dayjs": ["dayjs@1.11.20", "", {}, "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ=="], + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], "decode-bmp": ["decode-bmp@0.2.1", "", { "dependencies": { "@canvas/image-data": "1.1.0", "to-data-view": "1.1.0" } }, "sha512-NiOaGe+GN0KJqi2STf24hfMkFitDUaIoUU3eKvP/wAbLe8o6FuW5n/x7MHPR0HKvBokp6MQY/j7w8lewEeVCIA=="], diff --git a/package.json b/package.json index b374a02..d38da9b 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "@types/unist": "^3.0.3", "astro": "^6.0.2", "astro-icon": "^1.1.5", + "dayjs": "^1.11.20", "markdown-it": "^14.1.1", "marked": "^17.0.4", "marked-shiki": "^1.2.1", diff --git a/src/components/cards/CategoryCard.astro b/src/components/cards/CategoryCard.astro index 8a34fde..53c8017 100644 --- a/src/components/cards/CategoryCard.astro +++ b/src/components/cards/CategoryCard.astro @@ -55,7 +55,7 @@ const { slug, title, description, logoLight, logoDark, count, publishDate } = As {count} - +
- {publishDate} - + + {publishDate} + +
diff --git a/src/components/sections/CategorySection.astro b/src/components/sections/CategorySection.astro index 2ca8819..8481c97 100644 --- a/src/components/sections/CategorySection.astro +++ b/src/components/sections/CategorySection.astro @@ -6,7 +6,7 @@ import type { Post } from '@lib/directusTypes'; import CategoryCard from '@components/cards/CategoryCard.astro'; import LargeCategoryCard from '@components/cards/LargeCategoryCard.astro'; import directus from '@lib/directus'; -import { timeago } from '@support/time'; +import { formatFromNow } from '@support/time'; const global = await directus.request(readSingleton('site_global')); @@ -93,7 +93,7 @@ const categories = (await directus.request(readItems('categories'))) logoLight={category.logoLight} logoDark={category.logoDark} count={postMap.get(category.slug)?.length ?? 0} - publishDate={timeago(postMap.get(category.slug)?.[0]?.published_date)} + publishDate={formatFromNow(postMap.get(category.slug)?.[0]?.published_date)} /> ); @@ -106,7 +106,7 @@ const categories = (await directus.request(readItems('categories'))) logoLight={global.all_logoLight} logoDark={global.all_logoDark} count={posts.length} - publishDate={timeago(posts[0]?.published_date)} + publishDate={formatFromNow(posts[0]?.published_date)} /> diff --git a/src/support/time.ts b/src/support/time.ts index 53c6872..9318bca 100644 --- a/src/support/time.ts +++ b/src/support/time.ts @@ -1,34 +1,13 @@ -import { format, register } from 'timeago.js'; +import dayjs from 'dayjs'; +import relativeTime from 'dayjs/plugin/relativeTime'; -const TimeAgoConfiguration: string[][] = [ - ['today', 'today'], - ['%s seconds ago', 'in %s seconds'], - ['1 minute ago', 'in 1 minute'], - ['%s minutes ago', 'in %s minutes'], - ['1 hour ago', 'in 1 hour'], - ['%s hours ago', 'in %s hours'], - ['1 day ago', 'in 1 day'], - ['%s days ago', 'in %s days'], - ['1 week ago', 'in 1 week'], - ['%s weeks ago', 'in %s weeks'], - ['1 month ago', 'in 1 month'], - ['%s months ago', 'in %s months'], - ['1 year ago', 'in 1 year'], - ['%s years ago', 'in %s years'], -]; +dayjs.extend(relativeTime); -function timeago(date?: Date): string { +function formatFromNow(date: Date | null): string { if (!date) { - return 'today'; + return 'none'; } - - const localeFunc = (number: number, index: number, _?: number): [string, string] => { - return TimeAgoConfiguration[index] as [string, string]; - }; - - register('timeago', localeFunc); - - return format(date, 'timeago'); + return dayjs(date).fromNow() } function formatDate(date: Date): string { @@ -46,4 +25,4 @@ function formatShortDate(date: Date): string { }) } -export { formatDate, formatShortDate, timeago }; +export { formatFromNow, formatDate, formatShortDate, };