I was surprised today when writing some Typescript to format a date "to the user's current locale" I thought, so I wrote:

someDate.toLocaleString();

Figuring it would default to the browser's locale setting, as the documentation suggests.

Chrome came back with "2/18/2018 05:15:23 PM" so I then hunted in the Chrome Settings pages for somewhere I could tell it what my locale is, but without a lot of luck. I can tell it my "Accept-Language" header, which seems to be set for en_NZ;en;en-AU..., so clearly that wasn't being applied.

Digging further, I found that if I specified:

someDate.toLocaleString('en-UK');

I still get a US format date. I can get a german format date - close, but not quite to my liking with '.' instead of '/' if I use 'de-DE', so I decided to do a quick check on what I actually do get for different locales.

The result is:

en-NZ => 18/02/2018, 6:31:26 PM
en-AU => 18/02/2018, 6:31:26 pm
en-UK => 2/18/2018, 6:31:26 PM
en-US => 2/18/2018, 6:31:26 PM
es-ES => 18/2/2018 18:31:26
de-DE => 18.2.2018, 18:31:26
pt-PT => 18/02/2018, 18:31:26
pt-BR => 18/02/2018 18:31:26
jp-JP => 2/18/2018, 6:31:26 PM
en-IE => 18/2/2018, 18:31:26
en-EN => 2/18/2018, 6:31:26 PM
en-GB => 18/02/2018, 18:31:26

So apparently:
(1) Australians are the only ones among us who like their 'am/pm' in lowercase.
(2) The UK, England & Japan use US format dates.
(4) Except that Great Britain (i.e. UK except Northern Ireland) do use European format dates, even with 24-hour time.
(5) Portuguese people seem sane.
(6) Chrome is also ignoring my environment variables, which say things about "en_IE"

So when I'm not formatting dates according to ISO-8601 I think in future I shall switch to Portuguese style for my date formatting needs, and it looks like Date.toLocaleString() is pointless unless you're going to go through the pain of maintaining your own locale information for the user separately :-/