diff --git a/web/src/components/Transactions.tsx b/web/src/components/Transactions.tsx index fe2f3b3..ccc4a32 100644 --- a/web/src/components/Transactions.tsx +++ b/web/src/components/Transactions.tsx @@ -1,17 +1,12 @@ 'use client' import { FC, useEffect, useMemo, useState } from 'react' -import { format } from 'date-fns' import useIsMounted from '@/hooks/useIsMounted' import Axios from '@/libs/axios' import { Transaction } from '@/types' import { TransactionType } from '@/enums' - -const formatDateTime = (ts: number) => { - const f = 'yyyy-MM-dd HH:mm:ss' - return format(new Date(ts), f) -} +import { shortenTime } from '@/utils/date' const TxItem = ({ amountSat, description, createdAt, type }: Transaction) => { const amountColor = type === TransactionType.PAYMENT_SENT ? 'text-gray-100' : 'text-green-500' @@ -25,7 +20,7 @@ const TxItem = ({ amountSat, description, createdAt, type }: Transaction) => { {displayDescription}
- {formatDateTime(createdAt)} + {shortenTime(new Date(createdAt))}
diff --git a/web/src/utils/date.ts b/web/src/utils/date.ts new file mode 100644 index 0000000..bf502ac --- /dev/null +++ b/web/src/utils/date.ts @@ -0,0 +1,53 @@ +const Minute = 60 +const Hour = 3600 +const Day = 86400 +const Month = 30 * 86400 +const Year = 365 * 86400 + +export const shortenTime = (d: Date) => { + const now = new Date() + + let duration = (now.getTime() - d.getTime()) / 1000 + + if (duration < Minute) { + return 'a few seconds ago' + } + + if (duration < Hour) { + duration = Number.parseInt(String(duration / Minute)) + if (duration === 1) { + return 'a minute ago' + } + return duration + ' minutes ago' + } + + if (duration < Day) { + duration = Number.parseInt(String(duration / Hour)) + if (duration === 1) { + return 'an hour ago' + } + return duration + ' hours ago' + } + + if (duration < Month) { + duration = Number.parseInt(String(duration / Day)) + if (duration === 1) { + return 'a day ago' + } + return duration + ' days ago' + } + + if (duration < Year) { + duration = Number.parseInt(String(duration / Month)) + if (duration === 1) { + return 'a month ago' + } + return duration + ' months ago' + } + + duration = Number.parseInt(String(duration / Year)) + if (duration === 1) { + return 'a year ago' + } + return duration + ' years ago' +}