remix-demo
react router (remix) demo
git clone https://9o.is/git/remix-demo.git
date.ts
(1583B)
1 const monthNumber: {
2 [index: string]: string;
3 } = {
4 Jan: "01",
5 Feb: "02",
6 Mar: "03",
7 Apr: "04",
8 May: "05",
9 Jun: "06",
10 Jul: "07",
11 Aug: "08",
12 Sep: "09",
13 Oct: "10",
14 Nov: "11",
15 Dec: "12",
16 };
17
18 const monthToName: {
19 [index: string]: string;
20 } = {
21 Jan: "January",
22 Feb: "February",
23 Mar: "March",
24 Apr: "April",
25 May: "May",
26 Jun: "June",
27 Jul: "July",
28 Aug: "August",
29 Sep: "September",
30 Oct: "October",
31 Nov: "November",
32 Dec: "December",
33 };
34
35 interface ParsedDate {
36 year: string;
37 month: string;
38 monthNumber: string;
39 day: string;
40 hour: string;
41 minute: string;
42 }
43
44 function parse(date: Date): ParsedDate | null {
45 const pattern = /^\w{3} (\w{3}) (\d{2}) (\d{4}) (\d{2}):(\d{2})/;
46 const result = date.toString().match(pattern);
47
48 if (!result) return null;
49 const [, month, day, year, hour, minute] = result;
50
51 return {
52 year,
53 month: monthToName[month],
54 day,
55 hour,
56 minute,
57 monthNumber: monthNumber[month],
58 };
59 }
60
61 export function formatDateWithoutTime(date: Date): string | null {
62 const parsed = parse(date);
63 if (!parsed) return null;
64 return `${parsed.month} ${parsed.day}, ${parsed.year}`;
65 }
66
67 export function formatReadableDateTime(date: Date): string | null {
68 const parsed = parse(date);
69 if (!parsed) return null;
70 return `${parsed.month} ${parsed.day} at ${parsed.hour}:${parsed.minute}`;
71 }
72
73 export function formatDateTime(date: Date): string {
74 const parsed = parse(date);
75 if (!parsed) return "";
76 return `${parsed.year}-${parsed.monthNumber}-${parsed.day}T${parsed.hour}:${parsed.minute}`;
77 }