search and/or read your saved and liked bluesky posts
wails
go
svelte
sqlite
desktop
bluesky
1export function parseDateValue(value: unknown): Date | null {
2 if (!value) {
3 return null;
4 }
5
6 if (value instanceof Date) {
7 return Number.isNaN(value.getTime()) || value.getUTCFullYear() <= 1 ? null : value;
8 }
9
10 if (typeof value === "string" || typeof value === "number") {
11 const parsed = new Date(value);
12 return Number.isNaN(parsed.getTime()) || parsed.getUTCFullYear() <= 1 ? null : parsed;
13 }
14
15 return null;
16}
17
18export function formatShortDate(value: unknown): string {
19 const date = parseDateValue(value);
20 if (!date) {
21 return "-";
22 }
23
24 return date.toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric" });
25}
26
27export function formatLongDateTime(value: unknown): string {
28 const date = parseDateValue(value);
29 if (!date) {
30 return "Unknown date";
31 }
32
33 return date.toLocaleString("en-US", {
34 month: "short",
35 day: "numeric",
36 year: "numeric",
37 hour: "numeric",
38 minute: "2-digit",
39 });
40}