Files
hypixel-stats/src/lib/formatters.ts
2025-08-31 12:41:21 +02:00

44 lines
1.3 KiB
TypeScript

const numberFormatter = new Intl.NumberFormat(undefined, {
maximumFractionDigits: 2,
minimumFractionDigits: 0
})
const dateFormatter = new Intl.DateTimeFormat(undefined, {
year: "numeric",
month: "2-digit",
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
hour12: false
})
export function formatNumber(num: number): string {
return numberFormatter.format(num)
}
export function formatDate(timestamp: number): string {
return dateFormatter.format(new Date(timestamp))
}
export function formatRelativeTime(timestamp: number, type: "past" | "future") {
const now = Date.now()
let diffMs = timestamp - now
const past = diffMs < 0
diffMs = Math.abs(diffMs)
const suffixString = type === "past" ? " ago" : ""
const seconds = Math.floor(diffMs / 1000)
const days = Math.floor(seconds / 86400)
const hours = Math.floor((seconds % 86400) / 3600)
const minutes = Math.floor((seconds % 3600) / 60)
const secs = seconds % 60
const parts: string[] = []
if (days) parts.push(days + " days,")
if (hours) parts.push(hours + " hours,")
if (minutes) parts.push(minutes + " minutes and")
if (!parts.length || secs) parts.push(secs + " seconds")
const str = parts.slice(0, 4).join(" ")
return past ? str + suffixString : "in " + str
}