computer-scienceangular-roadmapbackend-roadmapblockchain-roadmapdba-roadmapdeveloper-roadmapdevops-roadmapfrontend-roadmapgo-roadmaphactoberfestjava-roadmapjavascript-roadmapnodejs-roadmappython-roadmapqa-roadmapreact-roadmaproadmapstudy-planvue-roadmapweb3-roadmap
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.0 KiB
79 lines
2.0 KiB
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', |
|
}); |
|
} |
|
|
|
export function getCurrentPeriod() { |
|
const now = new Date(); |
|
const hour = now.getHours(); |
|
if (hour < 12) { |
|
return 'morning'; |
|
} else if (hour < 18) { |
|
return 'afternoon'; |
|
} else { |
|
return 'evening'; |
|
} |
|
}
|
|
|