forked from Mxmilu666/frp
34 lines
1.1 KiB
TypeScript
34 lines
1.1 KiB
TypeScript
export function formatDistanceToNow(date: Date): string {
|
|
const seconds = Math.floor((new Date().getTime() - date.getTime()) / 1000)
|
|
|
|
let interval = seconds / 31536000
|
|
if (interval > 1) return Math.floor(interval) + ' years ago'
|
|
|
|
interval = seconds / 2592000
|
|
if (interval > 1) return Math.floor(interval) + ' months ago'
|
|
|
|
interval = seconds / 86400
|
|
if (interval > 1) return Math.floor(interval) + ' days ago'
|
|
|
|
interval = seconds / 3600
|
|
if (interval > 1) return Math.floor(interval) + ' hours ago'
|
|
|
|
interval = seconds / 60
|
|
if (interval > 1) return Math.floor(interval) + ' minutes ago'
|
|
|
|
return Math.floor(seconds) + ' seconds ago'
|
|
}
|
|
|
|
export function formatFileSize(bytes: number): string {
|
|
if (!Number.isFinite(bytes) || bytes < 0) return '0 B'
|
|
if (bytes === 0) return '0 B'
|
|
const k = 1024
|
|
const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
|
|
const i = Math.floor(Math.log(bytes) / Math.log(k))
|
|
// Prevent index out of bounds for extremely large numbers
|
|
const unit = sizes[i] || sizes[sizes.length - 1]
|
|
const val = bytes / Math.pow(k, i)
|
|
|
|
return parseFloat(val.toFixed(2)) + ' ' + unit
|
|
}
|