123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- import i18n, { t } from "i18next";
- const A_DAY = 24 * 60 * 60 * 1000;
- const dateTimeFullFormatter1 = new Intl.DateTimeFormat(i18n.language, {
- weekday: "short",
- month: "short",
- day: "numeric",
- });
- const dateTimeFullFormatter2 = new Intl.DateTimeFormat(i18n.language, {
- year: "numeric",
- });
- const dateTimeShortFormatter = new Intl.DateTimeFormat(i18n.language, {
- month: "short",
- day: "numeric",
- year: "numeric",
- hour: "2-digit",
- minute: "2-digit",
- });
- const timeFormatter = new Intl.DateTimeFormat(i18n.language, {
- timeStyle: "short",
- });
- export function formatDateFull(date: number | Date) {
- return [dateTimeFullFormatter1, dateTimeFullFormatter2]
- .map((f) => f.format(date))
- .join(" ");
- }
- export function formatDate(date: number | Date) {
- const withinYear =
- new Date().getFullYear() === new Date(date).getFullYear();
- const dateTimeFormat2 = !withinYear ? dateTimeFullFormatter2 : null;
- return [dateTimeFullFormatter1, dateTimeFormat2]
- .filter((f) => !!f)
- .map((f) => f.format(date))
- .join(" ");
- }
- export function formatDateTimeShort(date: number | Date) {
- return dateTimeShortFormatter.format(date);
- }
- export function formatTime(date: number | Date) {
- return timeFormatter.format(date).toUpperCase();
- }
- export function formatDateTimeFull(dateTime: number | Date): string {
- return [formatDateFull(dateTime), t("at"), formatTime(dateTime)].join(" ");
- }
- export function formatDateTime(dateTime: number | Date): string {
- return [formatDate(dateTime), t("at"), formatTime(dateTime)].join(" ");
- }
- export function formatDateRelative(date: number) {
- const units = {
- year: 24 * 60 * 60 * 1000 * 365,
- month: (24 * 60 * 60 * 1000 * 365) / 12,
- day: 24 * 60 * 60 * 1000,
- hour: 60 * 60 * 1000,
- minute: 60 * 1000,
- second: 1000,
- };
- const relativeDateFormat = new Intl.RelativeTimeFormat(i18n.language, {
- localeMatcher: "best fit",
- numeric: "always",
- style: "long",
- });
- const elapsed = date - Date.now(); // "Math.abs" accounts for both "past" & "future" scenarios
- for (const u in units)
- if (Math.abs(elapsed) > units[u] || u === "second")
- return relativeDateFormat.format(
- Math.round(elapsed / units[u]),
- u as Intl.RelativeTimeFormatUnit,
- );
- }
- export const isSameDay = (first, second) => {
- return (
- first.getFullYear() === second.getFullYear() &&
- first.getMonth() === second.getMonth() &&
- first.getDate() === second.getDate()
- );
- };
- export const getDate = (item) => {
- const currentDate = item.metadata.creationTime / 1000;
- const date = isSameDay(new Date(currentDate), new Date())
- ? t('TODAY')
- : isSameDay(new Date(currentDate), new Date(Date.now() - A_DAY))
- ? t('YESTERDAY')
- : formatDate(currentDate);
- return date;
- };
|