Kantongku: aplikasi pencatat keuangan pribadi offline-first
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user