File size: 1,051 Bytes
33962ff | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | export function fmtTs(s: number): string {
const t = Math.floor(s);
const h = Math.floor(t / 3600);
const m = Math.floor((t % 3600) / 60);
const sec = t % 60;
return h ? `${h}:${String(m).padStart(2, "0")}:${String(sec).padStart(2, "0")}` : `${m}:${String(sec).padStart(2, "0")}`;
}
export function fmtDuration(s: number): string {
const m = Math.round(s / 60);
return m >= 60 ? `${Math.floor(m / 60)}h ${m % 60}m` : `${m} min`;
}
export function compact(n: number | null | undefined): string {
if (n == null) return "–";
return Intl.NumberFormat("en", { notation: "compact", maximumFractionDigits: 1 }).format(n);
}
export function bytes(n: number): string {
if (n < 1024) return `${n} B`;
if (n < 1024 ** 2) return `${(n / 1024).toFixed(1)} KB`;
return `${(n / 1024 ** 2).toFixed(2)} MB`;
}
export const pct = (x: number, digits = 0) => `${(x * 100).toFixed(digits)}%`;
export function youtubeAt(url: string | null | undefined, start: number): string | null {
return url ? `${url}&t=${Math.floor(start)}s` : null;
}
|