From 5975fd97ab2396a44d368a8f6d981d1e59f248b1 Mon Sep 17 00:00:00 2001 From: MK- Turiz <143194249+turizspace@users.noreply.github.com> Date: Tue, 21 May 2024 12:13:34 +0300 Subject: [PATCH] [SOLVED] Problem: Datestamp is hard for humans to reason about (#9) --- src/lib/utils.ts | 29 +++++++++++++++++++ src/lib/views/messages/RenderKind1.svelte | 3 +- .../messages/RenderKind1AsThreadHead.svelte | 3 +- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/lib/utils.ts b/src/lib/utils.ts index bc14300..6418f01 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -76,3 +76,32 @@ export function npubToHex(npub: string): string { return hex; } +export function formatTimeAgo(timestamp: number): string { +const currentTime = Date.now(); +const secondsAgo = Math.floor((currentTime - timestamp) / 1000); + +if (secondsAgo < 60) { +return `${secondsAgo} seconds ago`; +} else if (secondsAgo < 3600) { +const minutesAgo = Math.floor(secondsAgo / 60); +return `${minutesAgo} minute${minutesAgo === 1 ? '' : 's'} ago`; +} else if (secondsAgo < 86400) { +const hoursAgo = Math.floor(secondsAgo / 3600); +return `${hoursAgo} hour${hoursAgo === 1 ? '' : 's'} ago`; +} else if (secondsAgo < 604800) { +const daysAgo = Math.floor(secondsAgo / 86400); +return `${daysAgo} day${daysAgo === 1 ? '' : 's'} ago`; +} else { +const formattedDate = new Date(timestamp).toLocaleString('en-US', { +weekday: 'short', +year: 'numeric', +month: 'short', +day: 'numeric', +hour: '2-digit', +minute: '2-digit', +hour12: true +}); +return formattedDate; +} +} + diff --git a/src/lib/views/messages/RenderKind1.svelte b/src/lib/views/messages/RenderKind1.svelte index ad78b14..998e0ee 100644 --- a/src/lib/views/messages/RenderKind1.svelte +++ b/src/lib/views/messages/RenderKind1.svelte @@ -11,6 +11,7 @@ import { viewed } from '@/snort_workers/main'; import UserDisplayName from '@/components/UserDisplayName.svelte'; import UserProfilePic from '@/components/UserProfilePic.svelte'; + import { formatTimeAgo } from '../../utils' export let note: NostrEvent; export let onClickReply: () => void; @@ -73,7 +74,7 @@ onMount(() => {
- {new Date(note.created_at * 1000).toLocaleString()} + {formatTimeAgo(note.created_at * 1000)} {#if $viewed.has(note.id)}✓{/if}
diff --git a/src/lib/views/messages/RenderKind1AsThreadHead.svelte b/src/lib/views/messages/RenderKind1AsThreadHead.svelte index 5d0f0c1..36053ef 100644 --- a/src/lib/views/messages/RenderKind1AsThreadHead.svelte +++ b/src/lib/views/messages/RenderKind1AsThreadHead.svelte @@ -6,6 +6,7 @@ import type { FrontendData } from '@/snort_workers/types'; import type { NostrEvent } from 'nostr-tools'; import { type Writable } from 'svelte/store'; + import { formatTimeAgo } from '../../utils' export let note: NostrEvent; //export let store: Writable; @@ -31,7 +32,7 @@
- {new Date(note.created_at * 1000).toLocaleString()}{#if $viewed.has(note.id)}✓{/if} + {formatTimeAgo(note.created_at * 1000)}{#if $viewed.has(note.id)}✓{/if}