45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
/**
|
|
* Format numbers with commas
|
|
*/
|
|
export function formatNumber(num: number): string {
|
|
return new Intl.NumberFormat('en-US').format(num)
|
|
}
|
|
|
|
/**
|
|
* Format date to YYYY-MM-DD
|
|
*/
|
|
export function formatDate(date: Date): string {
|
|
return date.toISOString().split('T')[0]
|
|
}
|
|
|
|
/**
|
|
* Get date range for last N days
|
|
*/
|
|
export function getDateRange(days: number): { start: string; end: string } {
|
|
const end = new Date()
|
|
const start = new Date()
|
|
start.setDate(start.getDate() - days)
|
|
return {
|
|
start: formatDate(start),
|
|
end: formatDate(end),
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Format relative time (e.g., "2 hours ago")
|
|
*/
|
|
export function formatRelativeTime(date: string | Date): string {
|
|
const d = typeof date === 'string' ? new Date(date) : date
|
|
const now = new Date()
|
|
const diff = now.getTime() - d.getTime()
|
|
const seconds = Math.floor(diff / 1000)
|
|
const minutes = Math.floor(seconds / 60)
|
|
const hours = Math.floor(minutes / 60)
|
|
const days = Math.floor(hours / 24)
|
|
|
|
if (days > 0) return `${days} day${days > 1 ? 's' : ''} ago`
|
|
if (hours > 0) return `${hours} hour${hours > 1 ? 's' : ''} ago`
|
|
if (minutes > 0) return `${minutes} minute${minutes > 1 ? 's' : ''} ago`
|
|
return 'Just now'
|
|
}
|