format.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // 格式化工具函数
  2. /**
  3. * 格式化日期 YYYY-MM-DD
  4. */
  5. export function formatDate(dateStr: string | Date | null | undefined): string {
  6. if (!dateStr) return '-';
  7. const d = new Date(dateStr);
  8. if (isNaN(d.getTime())) return String(dateStr);
  9. const year = d.getFullYear();
  10. const month = String(d.getMonth() + 1).padStart(2, '0');
  11. const day = String(d.getDate()).padStart(2, '0');
  12. return `${year}-${month}-${day}`;
  13. }
  14. /**
  15. * 格式化日期时间 YYYY-MM-DD HH:mm
  16. */
  17. export function formatDateTime(dateStr: string | Date | null | undefined): string {
  18. if (!dateStr) return '-';
  19. const d = new Date(dateStr);
  20. if (isNaN(d.getTime())) return String(dateStr);
  21. const year = d.getFullYear();
  22. const month = String(d.getMonth() + 1).padStart(2, '0');
  23. const day = String(d.getDate()).padStart(2, '0');
  24. const hour = String(d.getHours()).padStart(2, '0');
  25. const minute = String(d.getMinutes()).padStart(2, '0');
  26. return `${year}-${month}-${day} ${hour}:${minute}`;
  27. }
  28. /**
  29. * 格式化金额(带千分位分隔符,保留2位小数)
  30. */
  31. export function formatMoney(amount: number | null | undefined): string {
  32. if (amount == null || isNaN(amount)) return '0.00';
  33. return Number(amount).toLocaleString('zh-CN', {
  34. minimumFractionDigits: 2,
  35. maximumFractionDigits: 2
  36. });
  37. }
  38. /**
  39. * 格式化数量(带千分位分隔符,无小数)
  40. */
  41. export function formatNumber(num: number | null | undefined): string {
  42. if (num == null || isNaN(num)) return '0';
  43. return Number(num).toLocaleString('zh-CN');
  44. }
  45. /**
  46. * 格式化百分比
  47. */
  48. export function formatPercent(value: number, total: number): string {
  49. if (total === 0) return '0%';
  50. const percent = (value / total) * 100;
  51. return `${percent.toFixed(1)}%`;
  52. }