70 lines
1.8 KiB
TypeScript
70 lines
1.8 KiB
TypeScript
/**
|
|
* Date formatting utilities for recent notes display
|
|
*/
|
|
|
|
/**
|
|
* Format a date as relative time in English (e.g., "2 hours ago", "yesterday")
|
|
*/
|
|
export function formatRelativeTime(date: Date | string): string {
|
|
const now = new Date()
|
|
const then = new Date(date)
|
|
const seconds = Math.floor((now.getTime() - then.getTime()) / 1000)
|
|
|
|
if (seconds < 60) return 'just now'
|
|
|
|
const minutes = Math.floor(seconds / 60)
|
|
if (minutes < 60) {
|
|
return `${minutes} minute${minutes > 1 ? 's' : ''} ago`
|
|
}
|
|
|
|
const hours = Math.floor(minutes / 60)
|
|
if (hours < 24) {
|
|
return `${hours} hour${hours > 1 ? 's' : ''} ago`
|
|
}
|
|
|
|
const days = Math.floor(hours / 24)
|
|
if (days < 7) {
|
|
return `${days} day${days > 1 ? 's' : ''} ago`
|
|
}
|
|
|
|
// For dates older than 7 days, show absolute date
|
|
return then.toLocaleDateString('en-US', {
|
|
month: 'short',
|
|
day: 'numeric',
|
|
year: then.getFullYear() !== now.getFullYear() ? 'numeric' : undefined
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Format a date as relative time in French (e.g., "il y a 2 heures", "hier")
|
|
*/
|
|
export function formatRelativeTimeFR(date: Date | string): string {
|
|
const now = new Date()
|
|
const then = new Date(date)
|
|
const seconds = Math.floor((now.getTime() - then.getTime()) / 1000)
|
|
|
|
if (seconds < 60) return "à l'instant"
|
|
|
|
const minutes = Math.floor(seconds / 60)
|
|
if (minutes < 60) {
|
|
return `il y a ${minutes} minute${minutes > 1 ? 's' : ''}`
|
|
}
|
|
|
|
const hours = Math.floor(minutes / 60)
|
|
if (hours < 24) {
|
|
return `il y a ${hours} heure${hours > 1 ? 's' : ''}`
|
|
}
|
|
|
|
const days = Math.floor(hours / 24)
|
|
if (days < 7) {
|
|
return `il y a ${days} jour${days > 1 ? 's' : ''}`
|
|
}
|
|
|
|
// For dates older than 7 days, show absolute date
|
|
return then.toLocaleDateString('fr-FR', {
|
|
day: 'numeric',
|
|
month: 'short',
|
|
year: then.getFullYear() !== now.getFullYear() ? 'numeric' : undefined
|
|
})
|
|
}
|