0xtrails
Version:
SDK for Trails
46 lines (41 loc) • 1.5 kB
text/typescript
export const formatRelativeDate = (dateString?: string) => {
if (!dateString) return { relative: null, full: null }
try {
const date = new Date(dateString)
const now = new Date()
const diffMs = now.getTime() - date.getTime()
const diffSeconds = Math.floor(diffMs / 1000)
const diffMinutes = Math.floor(diffSeconds / 60)
const diffHours = Math.floor(diffMinutes / 60)
const diffDays = Math.floor(diffHours / 24)
const diffWeeks = Math.floor(diffDays / 7)
const diffMonths = Math.floor(diffDays / 30)
const diffYears = Math.floor(diffDays / 365)
let relative: string
if (diffSeconds < 60) {
relative = "just now"
} else if (diffMinutes < 60) {
relative = `${diffMinutes}m ago`
} else if (diffHours < 24) {
relative = `${diffHours}h ago`
} else if (diffDays < 7) {
relative = diffDays === 1 ? "1 day ago" : `${diffDays} days ago`
} else if (diffWeeks < 4) {
relative = diffWeeks === 1 ? "1 week ago" : `${diffWeeks} weeks ago`
} else if (diffMonths < 12) {
relative = diffMonths === 1 ? "1 month ago" : `${diffMonths} months ago`
} else {
relative = diffYears === 1 ? "1 year ago" : `${diffYears} years ago`
}
const full = date.toLocaleDateString("en-US", {
month: "short",
day: "numeric",
year: "numeric",
hour: "2-digit",
minute: "2-digit",
})
return { relative, full }
} catch {
return { relative: null, full: null }
}
}