'toLocaleDateString() short format

I want to have the short notation of the Date.toLocaleDateString() but in local format. There are a lot of solutions that hard-code the yyyy-mm-dd format but I want it to be dependent on the system that is hosting the page. This is my function thus far:

    function getDate(dateTimeString)
    {
        var date    = getDateTime(dateTimeString);
        var options = { year: "numeric", month: "numeric", day: "numeric" };        
        return date.toLocaleDateString( date.getTimezoneOffset(), options );
    }

but this returns it like so: Wednesday, January 28, 2015 which I don't want. Any suggestions/ideas?

PS: it's not a browser and there is a pretty real possibility that the person using it does not have interwebs connection; all information is gotten from a local database so I can't use any fany stuff like this How to get visitor's location (i.e. country) using javascript geolocation.



Solution 1:[1]

Note that NodeJS will only ship with the locale format of the device and so when you specify an argument toLocaleDateString like:

new Date("1983-March-25").toLocaleDateString('fr-CA', { year: 'numeric', month: '2-digit', day: '2-digit' })
'03/25/1983'

Notice you expected 'fr-CA' to give you YYYY-MM-DD, but it did not. That's because it is only ever using the US locale since my Node instance is running in the US locale.

There's actually a bug report on Node github account delineating the issue and solution:

https://github.com/nodejs/node/issues/8500

The solution provided is installing the full-icu module.

Solution 2:[2]

You could try something like:

var date = new Date(Date.UTC(2015, 0, 28, 4, 0, 0));
console.log(date.toLocaleDateString("nl",{year:"2-digit",month:"2-digit", day:"2-digit"}));

Which gives me "28-01-15" in Chrome (48.0.2564.116) at least.

Firefox just returns "01/28/2015", and phantomJS returns "28/01/2015" regardless of the locale.

Solution 3:[3]

JavaScript Date toLocaleString() This method formats a date into a string, using language specific format.

Examples :

Only date :

var n = new Date();
console.log("es-CL: " + n.toLocaleDateString("es-CL"));
// es-CL: 03-09-2021

Date with Time :

var n = new Date();
console.log("es-CL: " + n.toLocaleString("es-CL"));
// es-CL: 03-09-2021 17:56:58

List are here :

ar-SA: ???/??/???? ?? ?? ?:??:?? ?
bn-BD: ?/?/???? ?:??:?? PM
bn-IN: ?/?/???? ?:??:?? PM
cs-CZ: 3. 9. 2021 17:56:58
da-DK: 3.9.2021 17.56.58
de-AT: 3.9.2021, 17:56:58
de-CH: 3.9.2021, 17:56:58
de-DE: 3.9.2021, 17:56:58
el-GR: 3/9/2021, 5:56:58 ?.?.
en-AU: 03/09/2021, 5:56:58 pm
en-CA: 2021-09-03, 5:56:58 p.m.
en-GB: 03/09/2021, 17:56:58
en-IE: 3/9/2021, 17:56:58
en-IN: 3/9/2021, 5:56:58 pm
en-NZ: 3/09/2021, 5:56:58 pm
en-US: 9/3/2021, 5:56:58 PM
en-ZA: 2021/09/03, 17:56:58
es-AR: 3/9/2021 17:56:58
es-CL: 03-09-2021 17:56:58
es-CO: 3/9/2021, 5:56:58 p. m.
es-ES: 3/9/2021 17:56:58
es-MX: 3/9/2021 17:56:58
es-US: 3/9/2021 5:56:58 p. m.
fi-FI: 3.9.2021 klo 17.56.58
fr-BE: 03/09/2021, 17:56:58
fr-CA: 2021-09-03, 17 h 56 min 58 s
fr-CH: 03.09.2021, 17:56:58
fr-FR: 03/09/2021, 17:56:58
he-IL: 3.9.2021, 17:56:58
hi-IN: 3/9/2021, 5:56:58 pm
hu-HU: 2021. 09. 03. 17:56:58
id-ID: 3/9/2021 17.56.58
it-CH: 3/9/2021, 17:56:58
it-IT: 3/9/2021, 17:56:58
ja-JP: 2021/9/3 17:56:58
ko-KR: 2021. 9. 3. ?? 5:56:58
nl-BE: 3/9/2021 17:56:58
nl-NL: 3-9-2021 17:56:58
no-NO: 3.9.2021, 17:56:58
pl-PL: 3.09.2021, 17:56:58
pt-BR: 03/09/2021 17:56:58
pt-PT: 03/09/2021, 17:56:58
ro-RO: 03.09.2021, 17:56:58
ru-RU: 03.09.2021, 17:56:58
sk-SK: 3. 9. 2021, 17:56:58
sv-SE: 2021-09-03 17:56:58
ta-IN: 3/9/2021, ???????? 5:56:58
ta-LK: 3/9/2021, 17:56:58
th-TH: 3/9/2564 17:56:58
tr-TR: 03.09.2021 17:56:58
zh-CN: 2021/9/3 ??5:56:58
zh-HK: 3/9/2021 ??5:56:58
zh-TW: 2021/9/3 ??5:56:58

Solution 4:[4]

Yes. Its pretty straightforward. You can use the date object as follows:

var d = new Date();
var mm = d.getMonth() + 1;
var dd = d.getDate();
var yy = d.getFullYear();

Then you should have the numbers you need to form a string in whatever format you need.

var myDateString = yy + '-' + mm + '-' + dd; //(US)

Note this will give something like 2015-1-2 if the digits are in single figures, if you need 2015-01-02 then you will need further converting.

Also please note this will only give the 'client' date, ie. the date on the users system. This should be in their local time. If you need server time then you will have to have some kind of api to call.

Solution 5:[5]

For date : .toLocaleDateString('en-US', {day: "numeric"})

For month in full : .toLocaleDateString('en-US', {month: "long"})

For month in short : .toLocaleDateString('en-US', {month: "short"})

For day in full : .toLocaleDateString('en-US', {day: "long"})

For dayin short: .toLocaleDateString('en-US', {day: "short"})

Solution 6:[6]

Apparently Date.prototype.toLocaleDateString() is inconsistent across browsers. You can implement different variations of a short date format, as explained here: How format JavaScript Date with regard to the browser culture?

Solution 7:[7]

 const options = { year: 'numeric', month: 'numeric', day: 'numeric' }
 const new Date(date).toLocaleDateString('en', options)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Daniel Viglione
Solution 2 Nigel Scott
Solution 3 Michal Skop
Solution 4
Solution 5 Rahul Sarma
Solution 6 Community
Solution 7 Gerd