Datums formatteren in JavaScript zonder library: een live Intl.DateTimeFormat-builder, code voor YYYY-MM-DD en MM/DD/YYYY, tijdzones, relatieve tijd, periodes en de parse-valkuilen achter bugs waarbij de datum een dag verschuift.
Om een datum in JavaScript te formatteren gebruikt u Intl.DateTimeFormat of toLocaleDateString met een locale en opties, bijvoorbeeld date.toLocaleDateString("en-US", { dateStyle: "long" }) voor March 5, 2026. Gebruik toISOString() voor API's, de timeZone-optie om een andere zone te tonen en Intl.RelativeTimeFormat voor zinnen als 3 dagen geleden.
Snelle antwoorden
Kies een locale en opties in de builder en kopieer de code die hij schrijft; de preview wordt door uw eigen browser geformatteerd. Daaronder een tabel met alledaagse notaties en uitvoerbare voorbeelden voor zones, relatieve tijd en periodes.
Gebruik het lokale jaar, de maand plus één en de dag, aangevuld met padStart(2, "0"), en verbind ze met koppeltekens. toISOString().slice(0, 10) geeft ook die vorm, maar in UTC, dus rond middernacht kan het de verkeerde dag tonen.
new Date("2026-03-05") wordt gelezen als middernacht UTC. Ten westen van Greenwich is het op dat moment lokaal nog de 4e. Parse met een tijd ("2026-03-05T00:00") of met new Date(2026, 2, 5) om lokale middernacht te krijgen.
Niet voor formatteren. Intl dekt locales, tijdzones en relatieve tijd af in elke moderne browser. De eigen maintainers van Moment noemen het een legacy-project; voor rekenen met datums werkt een kleine library zoals date-fns of de nieuwere Temporal API (waar beschikbaar) goed.
Geef timeZone mee met een IANA-naam, bijvoorbeeld { timeZone: "America/New_York", timeStyle: "short" }. Het Date-object blijft hetzelfde moment; alleen de manier waarop het wordt geschreven verandert.
Gangbare notaties en de code voor elk
Een ISO-string met alleen een datum wordt gelezen als middernacht UTC, maar een datum-tijdstring zonder offset wordt gelezen als lokale tijd. Dat verschil veroorzaakt de meeste bugs waarbij de datum een dag verschuift.
Bouw het op uit de lokale onderdelen met padStart. De truc met de en-CA-locale geeft hetzelfde resultaat, maar vertrouwt erop dat de notatie van die locale gelijk blijft.
timeZone neemt een IANA-naam. De Date zelf heeft geen zone; alleen de opmaak verandert. Let op: timeZoneName kan niet gecombineerd worden met dateStyle of timeStyle.
Intl.RelativeTimeFormat schrijft de woorden; u kiest de eenheid. Deze helper kiest de grootste eenheid die past.
formatRange haalt herhaalde delen weg, zodat een boeking van de 5e tot de 9e van dezelfde maand natuurlijk leest.
Als geen enkele voorinstelling past, neemt u de gelokaliseerde onderdelen en zet u ze zelf in volgorde, bijvoorbeeld om de dag groter te stylen dan de maand.
Werkt u met epoch-seconden? Gebruik de
Intl.DateTimeFormat-opties die in de builder worden gebruikt
(geen)
(uw zone)
Fout: {msg}
Datum en tijd
Locale
Tijdzone
Modus
Vooraf ingestelde stijlen
Elk onderdeel kiezen
Code kopiëren
Gratis beginnen · Geen creditcard nodig