68 lines
2.0 KiB
TypeScript
68 lines
2.0 KiB
TypeScript
export function formatRupiah(value: number): string {
|
|
const formatted = Math.abs(value).toLocaleString('id-ID');
|
|
return `${value < 0 ? '-' : ''}Rp ${formatted}`;
|
|
}
|
|
|
|
/** Format angka mentah (string digit) jadi ribuan ber-titik, misal "50000" -> "50.000" */
|
|
export function formatRibuan(raw: string): string {
|
|
if (!raw) return '';
|
|
const n = Number(raw);
|
|
if (!Number.isFinite(n)) return raw;
|
|
return n.toLocaleString('id-ID');
|
|
}
|
|
|
|
export function formatRupiahShort(value: number): string {
|
|
if (Math.abs(value) >= 1_000_000) {
|
|
const juta = value / 1_000_000;
|
|
return `Rp ${juta.toLocaleString('id-ID', { maximumFractionDigits: 1 })} jt`;
|
|
}
|
|
if (Math.abs(value) >= 1_000) {
|
|
const ribu = value / 1_000;
|
|
return `Rp ${ribu.toLocaleString('id-ID', { maximumFractionDigits: 1 })} rb`;
|
|
}
|
|
return formatRupiah(value);
|
|
}
|
|
|
|
export function formatDate(iso: string): string {
|
|
const d = new Date(iso);
|
|
return d.toLocaleDateString('id-ID', {
|
|
day: 'numeric',
|
|
month: 'short',
|
|
year: 'numeric',
|
|
});
|
|
}
|
|
|
|
export function formatDateTime(iso: string): string {
|
|
const d = new Date(iso);
|
|
const date = d.toLocaleDateString('id-ID', { day: 'numeric', month: 'short' });
|
|
const time = d.toLocaleTimeString('id-ID', {
|
|
hour: '2-digit',
|
|
minute: '2-digit',
|
|
});
|
|
return `${date} · ${time}`;
|
|
}
|
|
|
|
export function todayLabel(): string {
|
|
return new Date().toLocaleDateString('id-ID', {
|
|
weekday: 'long',
|
|
day: 'numeric',
|
|
month: 'long',
|
|
year: 'numeric',
|
|
});
|
|
}
|
|
|
|
/** Kunci minggu ISO sederhana: tanggal Senin (YYYY-MM-DD) */
|
|
export function isoWeekKey(d: Date): string {
|
|
const date = new Date(d);
|
|
const day = date.getDay() || 7; // Senin=1, ..., Minggu=7
|
|
date.setDate(date.getDate() - (day - 1));
|
|
date.setHours(0, 0, 0, 0);
|
|
return date.toISOString().slice(0, 10);
|
|
}
|
|
|
|
export function shiftWeekKey(key: string, deltaWeeks: number): string {
|
|
const monday = new Date(`${key}T00:00:00Z`);
|
|
monday.setUTCDate(monday.getUTCDate() + deltaWeeks * 7);
|
|
return monday.toISOString().slice(0, 10);
|
|
}
|