49 lines
1.5 KiB
JavaScript
49 lines
1.5 KiB
JavaScript
/** Euro formatter (nl-NL, geen decimalen) */
|
|
export const fmt = (n) =>
|
|
new Intl.NumberFormat("nl-NL", {
|
|
style: "currency", currency: "EUR", maximumFractionDigits: 0,
|
|
}).format(n || 0);
|
|
|
|
/** Percentage formatter */
|
|
export const pct = (n, d = 1) => `${((n || 0) * 100).toFixed(d)}%`;
|
|
|
|
/** ISO datum (YYYY-MM-DD) → Nederlandse notatie (DD-MM-YYYY) */
|
|
export const fmtDatum = (s) => {
|
|
if (!s) return s;
|
|
const [y, m, d] = s.split("-");
|
|
return `${d}-${m}-${y}`;
|
|
};
|
|
|
|
const MAANDEN = ["jan", "feb", "mrt", "apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec"];
|
|
|
|
/**
|
|
* ISO datum → korte maandnotatie (`2026-09-16` → `sep '26`).
|
|
*
|
|
* Voor de x-as van de grafieken: een volledige datum is tien tekens en past
|
|
* daar alleen gedraaid, wat bij een lange reeks onleesbaar wordt. De exacte
|
|
* dag staat in de tooltip.
|
|
*/
|
|
export const fmtMaand = (s) => {
|
|
if (!s) return s;
|
|
const [y, m] = s.split("-");
|
|
return `${MAANDEN[parseInt(m, 10) - 1] ?? m} '${y.slice(2)}`;
|
|
};
|
|
|
|
/** Crypto-bedrag formatter (4 decimalen standaard) */
|
|
export const fmtCrypto = (n, d = 4) => (parseFloat(n) || 0).toFixed(d);
|
|
|
|
/**
|
|
* Bedrag in USD of EUR opmaken afhankelijk van geselecteerde valuta.
|
|
* @param {number} amount
|
|
* @param {"USD"|"EUR"} currency
|
|
* @param {number} usdEurRate
|
|
*/
|
|
export function fmtMoney(amount, currency = "EUR", usdEurRate = 0.92) {
|
|
const v = currency === "EUR" ? amount * usdEurRate : amount;
|
|
return new Intl.NumberFormat("nl-NL", {
|
|
style: "currency",
|
|
currency,
|
|
maximumFractionDigits: 0,
|
|
}).format(v || 0);
|
|
}
|