format.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. export function formatDistanceToNow(date: Date): string {
  2. const seconds = Math.floor((new Date().getTime() - date.getTime()) / 1000)
  3. let interval = seconds / 31536000
  4. if (interval > 1) return Math.floor(interval) + ' years ago'
  5. interval = seconds / 2592000
  6. if (interval > 1) return Math.floor(interval) + ' months ago'
  7. interval = seconds / 86400
  8. if (interval > 1) return Math.floor(interval) + ' days ago'
  9. interval = seconds / 3600
  10. if (interval > 1) return Math.floor(interval) + ' hours ago'
  11. interval = seconds / 60
  12. if (interval > 1) return Math.floor(interval) + ' minutes ago'
  13. return Math.floor(seconds) + ' seconds ago'
  14. }
  15. export function formatFileSize(bytes: number): string {
  16. if (!Number.isFinite(bytes) || bytes < 0) return '0 B'
  17. if (bytes === 0) return '0 B'
  18. const k = 1024
  19. const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
  20. const i = Math.floor(Math.log(bytes) / Math.log(k))
  21. // Prevent index out of bounds for extremely large numbers
  22. const unit = sizes[i] || sizes[sizes.length - 1]
  23. const val = bytes / Math.pow(k, i)
  24. return parseFloat(val.toFixed(2)) + ' ' + unit
  25. }