Files
developer-roadmap/src/lib/date.ts
T
Arik ChakmaandKamran Ahmed 1981568501 feat: implement project status (#6513)
* wip

* wip

* wip

* fix: button width

* Add stepper component

* Refactor project stepper

* Refactor stepper

* Refactor stepper

* Update clicker

* Refactor project stepper

* Add projects tip popup

* Add start project modal

* Submission requirement modalg

* Requirement verification functionality

* Update project submission

* Voting and active timeline

* Finalize project solution stepper

* Update empty project page

* Add user avatars

* Solutions listing page

* Update tab design

* Fix styles for loading and pagination

* Redesign project page header

* Make project page responsive

* Make project pages responsive

* Update the leaving roadmap page

* Start project modal updates

---------

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2024-08-17 12:59:35 +01:00

68 lines
1.8 KiB
TypeScript

import dayjs from 'dayjs';
export function getRelativeTimeString(
date: string | Date,
isTimed: boolean = false,
): string {
if (!Intl?.RelativeTimeFormat) {
return date.toString();
}
const rtf = new Intl.RelativeTimeFormat('en', {
numeric: 'auto',
style: 'narrow',
});
const currentDate = new Date();
const targetDate = new Date(date);
const diffInMilliseconds = currentDate.getTime() - targetDate.getTime();
const diffInMinutes = Math.round(diffInMilliseconds / (1000 * 60));
const diffInHours = Math.round(diffInMilliseconds / (1000 * 60 * 60));
const diffInDays = Math.round(diffInMilliseconds / (1000 * 60 * 60 * 24));
let relativeTime;
if (diffInMinutes < 60) {
relativeTime = rtf.format(-diffInMinutes, 'minute');
} else if (diffInHours < 24) {
relativeTime = rtf.format(-diffInHours, 'hour');
} else if (diffInDays < 7) {
if (isTimed) {
relativeTime = dayjs(date).format('ddd h:mm A');
} else {
relativeTime = rtf.format(-diffInDays, 'day');
}
} else if (diffInDays < 30) {
relativeTime = rtf.format(-Math.round(diffInDays / 7), 'week');
} else if (diffInDays < 365) {
relativeTime = rtf.format(-Math.round(diffInDays / 30), 'month');
} else {
if (isTimed) {
relativeTime = dayjs(date).format('MMM D, YYYY h:mm A');
} else {
relativeTime = dayjs(date).format('MMM D, YYYY');
}
}
if (relativeTime === 'this minute') {
return 'just now';
}
return relativeTime;
}
export function formatMonthDate(date: string): string {
return new Date(date).toLocaleDateString('en-US', {
month: 'long',
year: 'numeric',
});
}
export function formatActivityDate(date: string): string {
return new Date(date).toLocaleDateString('en-US', {
month: 'long',
day: 'numeric',
});
}