Locale Date & Number Format Reference
Compare how locales write dates and numbers, plus why “1.234” means two different numbers and why a three-digit grouping regex is wrong.
Every format here is produced by your browser's own Intl data, which follows CLDR — the same source a properly localised application uses. Nothing is a hand-kept table, and nothing is uploaded.
Month-first dates are almost unique to one country
Of the 30 locales here, day-month-year is used by most, year-month-day by a handful, and month-day-year by 1. British and American English disagree despite sharing a language.
| Order | Locales | Which |
|---|---|---|
| DMY | 24 | en-GB de-DE fr-FR es-ES it-IT pt-BR nl-NL pl-PL ru-RU tr-TR … |
| YMD | 5 | sv-SE ja-JP zh-CN ko-KR hu-HU |
| MDY | 1 | en-US |
Which makes a bare numeric date genuinely ambiguous rather than merely unfamiliar. "03/04/2026" is the fourth of March nearly everywhere and the third of April in one place, and nothing in the string says which. The fix is not a better guess — it is to write the month in letters, or to use ISO order, which no locale here reads as anything else.
The decimal point is a minority spelling
21 of these locales separate the decimal with a comma and 8 with a period. At least one uses neither.
| Decimal separator | Locales |
|---|---|
| "," | 21 |
| "." | 8 |
| "٫" | 1 |
So "1.234" is two different numbers
Read under each locale's own conventions — stripping its group separator and swapping its decimal for a period, which is what any hand-rolled parser does — the same six characters come out a thousand apart.
| Read as | "1.234" means |
|---|---|
| English (en-US) | 1.234 |
| German (de-DE) | 1234 |
| French (fr-FR) | 1.234 |
| English (en-IN) | 1.234 |
There is nothing in the string to disambiguate it — every character is a digit or a period. A
number typed by a user is not a number until you know what conventions they typed it under, so
a form that accepts free text and calls parseFloat on it is silently wrong for
most of the world, and wrong by a factor of a thousand rather than a rounding error.
Grouping is not always in threes
Indian English groups the higher digits two at a time, so 12,345,678 is written 1,23,45,678. A regular expression built around three-digit groups rejects a correctly formatted number outright.
| Locale | 12345678.9 formatted | Group sizes |
|---|---|---|
| en-US | 12,345,678.9 | 2-3-3 |
| de-DE | 12.345.678,9 | 2-3-3 |
| fr-FR | 12 345 678,9 | 2-3-3 |
| sv-SE | 12 345 678,9 | 2-3-3 |
| hi-IN | 1,23,45,678.9 | 1-2-2-3 |
And the locales that separate with a space do not all use the same space. There are 2 distinct space characters in use here, and none of them is the space bar:
| Character | Code point | Used by |
|---|---|---|
| no-break | U+202F | fr-FR |
| no-break | U+00A0 | sv-SE pl-PL ru-RU fi-FI cs-CZ hu-HU uk-UA nb-NO |
French uses a different one from Swedish, Polish and Russian. A parser that strips ASCII spaces removes none of them, which is the quiet version of this bug: the number looks like it has spaces, the strip appears to run, and the value comes back NaN.
Currency symbols go on both sides
The symbol follows the number in 19 of these locales and precedes it in 11. Neither is rare enough to hard-code, which is the whole argument for formatting currency through the platform rather than concatenating a symbol onto a string.
How to use
- Pick a locale and type a number.
- Every locale formats it in the table below.
- The last column reads your text back under each convention.
- Watch the same digits become different numbers.
Frequently asked questions
Which date order is most common?
Day-month-year by a wide margin. Of the thirty locales here, most use day first, a handful in east Asia and Scandinavia use year first, and exactly one uses month first. British and American English disagree despite sharing a language.
Is a numeric date ambiguous?
Genuinely, yes. 03/04/2026 is the fourth of March in nearly every locale here and the third of April in one, and nothing in the string says which. Writing the month in letters removes the ambiguity, and so does ISO order, which no locale reads as anything else.
Is the decimal point universal?
It is a minority spelling. Twenty-one of these thirty locales separate the decimal with a comma, eight with a period, and Arabic with neither. The period is normal in English and unusual elsewhere.
What does 1.234 mean?
It depends entirely on who typed it. Read under German conventions it is one thousand two hundred and thirty-four; read under English ones it is just over one. The same six characters, a factor of a thousand apart, with nothing in the string to distinguish them.
Can I just call parseFloat on user input?
Not safely. A number typed by a person is not a number until you know what conventions they typed it under, and getting it wrong is a factor-of-a-thousand error rather than a rounding one. Either format the input for them or ask the browser to parse it in a known locale.
Does every locale group digits in threes?
No. Indian English groups the higher digits two at a time, so 12,345,678 is written 1,23,45,678. A regular expression built around three-digit groups rejects that outright, which is a common source of validation bugs.
Why does stripping spaces not work on French numbers?
Because the separator is not a space. French uses a narrow no-break space and Swedish, Polish and Russian use an ordinary no-break space — two different characters, neither of which is the space bar. Replacing ASCII spaces removes none of them and the value comes back as NaN.
Which side does the currency symbol go on?
Both. It follows the number in nineteen of these locales and precedes it in eleven, so neither position is safe to hard-code. That is the whole argument for formatting currency through the platform rather than concatenating a symbol onto a string.
Does this send anything anywhere?
No. Every format is produced in your browser, and nothing is uploaded.
🔒 This tool runs entirely in your browser. Nothing you enter is uploaded, logged, or stored.