38 lines
896 B
TypeScript
38 lines
896 B
TypeScript
/**
|
|
* Format a date as a human-friendly relative time string
|
|
* Examples: "just now", "5m ago", "2h ago", "3d ago", "Jan 15"
|
|
*/
|
|
export function formatTimeAgo(date: Date): string {
|
|
const now = new Date();
|
|
const diffMs = now.getTime() - date.getTime();
|
|
const diffSec = Math.floor(diffMs / 1000);
|
|
const diffMin = Math.floor(diffSec / 60);
|
|
const diffHour = Math.floor(diffMin / 60);
|
|
const diffDay = Math.floor(diffHour / 24);
|
|
|
|
if (diffSec < 10) {
|
|
return "just now";
|
|
}
|
|
|
|
if (diffMin < 1) {
|
|
return `${diffSec}s ago`;
|
|
}
|
|
|
|
if (diffHour < 1) {
|
|
return `${diffMin}m ago`;
|
|
}
|
|
|
|
if (diffDay < 1) {
|
|
return `${diffHour}h ago`;
|
|
}
|
|
|
|
if (diffDay < 7) {
|
|
return `${diffDay}d ago`;
|
|
}
|
|
|
|
// For older dates, show abbreviated month and day
|
|
const month = date.toLocaleDateString("en-US", { month: "short" });
|
|
const day = date.getDate();
|
|
return `${month} ${day}`;
|
|
}
|