39 lines
1.0 KiB
JavaScript
39 lines
1.0 KiB
JavaScript
import { clsx } from 'clsx';
|
|
import { twMerge } from 'tailwind-merge';
|
|
|
|
export function cn(...inputs) {
|
|
return twMerge(clsx(inputs));
|
|
}
|
|
|
|
export function fmt(amount) {
|
|
return '$' + Number(amount || 0).toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
|
}
|
|
|
|
export function fmtDate(dateStr) {
|
|
if (!dateStr) return '—';
|
|
const [y, m, d] = dateStr.split('-');
|
|
return `${parseInt(m)}/${parseInt(d)}/${y}`;
|
|
}
|
|
|
|
export function todayStr() {
|
|
return new Date().toISOString().slice(0, 10);
|
|
}
|
|
|
|
export function fmtUptime(seconds) {
|
|
const d = Math.floor(seconds / 86400);
|
|
const h = Math.floor((seconds % 86400) / 3600);
|
|
const m = Math.floor((seconds % 3600) / 60);
|
|
const s = seconds % 60;
|
|
if (d > 0) return `${d}d ${h}h ${m}m`;
|
|
if (h > 0) return `${h}h ${m}m ${s}s`;
|
|
if (m > 0) return `${m}m ${s}s`;
|
|
return `${s}s`;
|
|
}
|
|
|
|
export function fmtBytes(bytes) {
|
|
if (!bytes) return '0 B';
|
|
if (bytes < 1024) return `${bytes} B`;
|
|
if (bytes < 1048576) return `${(bytes / 1024).toFixed(1)} KB`;
|
|
return `${(bytes / 1048576).toFixed(2)} MB`;
|
|
}
|