Javascript users incorrect locale with date formatting
Asked Answered
B

2

13

In javascript I'm using Date.toLocaleDateString to format my dates in the user's locale. While in theory it should work, it doesn't.

I am located in the UK. My computer is set to UK and my default language is set to en/gb in both system settings and the browser content settings. Yet, Firefox always displays dates the US format. Is there some trick I'm missing?

The full code for formatting is this:

var timestamp = ...; //some value from ajax call
var dt = new Date(timestamp);
$('#audit-date').text(dt.toLocaleDateString());

In the UK for today's date I would expect to see 05/02/2014, but I see 02/05/2014, which is the US version of it.

Bobette answered 5/2, 2014 at 21:56 Comment(3)
I use Chrome, my Windows machine region is set to UK/England/London, toLocaleDateString gives me US style dates. I think it's because we speak English so just download the default en-US version of the browser. I usually write dates in an international way which is unmistakable, for example 2014-02-05 for today.Enounce
What does (new Date()).toLocaleDateString() give?Vulturine
I'm also having this issue, On two machines in our office one returns toLocaleDateString the US way the other the UK way. I tried toLocaleDateString(window.navigator.language). But it just flips the problem as on the one returning the UK date it returns its language as "en-US" which makes no sense!! what is it based on?Ibarra
C
6

Use this to pass the locale.

var locale = window.navigator.userLanguage || window.navigator.language;
alert(date.toLocaleString(locale));
Complex answered 12/4, 2017 at 3:54 Comment(0)
D
4

A quick look into to awesome MDN Documentation tells me that you need a locale parameter, otherwise the result depends on the browser. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString

// British English uses day-month-year order
alert(date.toLocaleString("en-GB"));
// → "20/12/2012 03:00:00"

For more custom date formats I use the moment.js library. http://momentjs.com/

Dotterel answered 5/2, 2014 at 22:6 Comment(2)
This defeats the purpose. I don't know what the locale is - I want the to automatically match user's locale.Bobette
You said your computers locale is UK/GB but your browsers is probably not. It's also possible that JavaScripts hat no possibility to get you locale further than the language, as this post suggests. #674405Dotterel

© 2022 - 2024 — McMap. All rights reserved.