Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to detect the user's locale date and time format

Is there a possibility to determine, with pure Javascript, what date time FORMAT has user configured on his operating system (Windows, Linux, MAC OS, etc.)?

Thanks in advance.

EDIT: I know about the method toLocaleString(), but this isn't help me to get the format that client has configured on his local machine.

like image 751
Sergiu Avatar asked Apr 05 '11 07:04

Sergiu


2 Answers

I wrote something in pure javascript that works in IE/Firefox/Chrome. It will out put MM/DD/YYYY or DD/MM/YYYY,... depending in toLocalDateString().

Did not work on Safari but new Date().toLocalDateString() did not either.

Here is a jsFiddle

 //Create a known date string
var y = new Date(2013, 9, 25);
var lds = y.toLocaleDateString();

//search for the position of the year, day, and month
var yPosi = lds.search("2013");
var dPosi = lds.search("25");
var mPosi = lds.search("10");

//Sometimes the month is displayed by the month name so guess where it is
if(mPosi == -1)
{
    mPosi = lds.search("9");
    if(mPosi == -1)
    {
        //if the year and day are not first then maybe month is first
        if(yPosi != 0 && dPosi != 0)
        {
            mPosi = 0;
        }
        //if year and day are not last then maybe month is last
        else if((yPosi+4 <  lds.length) && (dPosi+2 < lds.length)){
            mPosi = Infinity;
        }
        //otherwist is in the middle
        else  if(yPosi < dPosi){
            mPosi = ((dPosi - yPosi)/2) + yPosi;            
        }else if(dPosi < yPosi){
            mPosi = ((yPosi - dPosi)/2) + dPosi;
        }   
    }

}


var formatString="";
var order = [yPosi, dPosi, mPosi];
order.sort(function(a,b){return a-b});

for(i=0; i < order.length; i++)
{
    if(order[i] == yPosi)
    {
        formatString += "YYYY/";
    }else if(order[i] == dPosi){
        formatString += "DD/";
    }else if(order[i] == mPosi){
        formatString += "MM/";
    }
}

formatString = formatString.substring(0, formatString.length-1);

$('#timeformat').html(formatString+" "+lds);
like image 117
Nick Avatar answered Oct 13 '22 20:10

Nick


Here's an idea, that may or may not work.

Create a date where all the elements are distinct, like February 18th 1999 at 13:45, use toLocaleString(), then identify the elements based on their distinct values.

Could be kind of complicated and I don't have any code that might help with it, but it's an idea to be thrown out there, maybe you can make use of it.


EDIT: Here's some code:

var d = new Date(1999,1,18,13,45,0).toLocaleString();
document.write("<p>String: "+d+"</p>");
var f = d
    .replace(/1999/,"%Y")
    .replace(/99/,"%y")
    .replace(/F[^ ]{3,}/i,"%M")
    .replace(/F[^ ]+/i,"%m")
    .replace(/PM/,"%A")
    .replace(/pm/,"%a")
    .replace(/18[^ ]+/,"%d%S") // day number with suffix
    .replace(/18/,"%d")
    .replace(/13/,"%H")
    .replace(/1/,"%h")
    .replace(/45/,"%i")
    .replace(/00/,"%s");
    // optionally add something to detect the day of the week (Thursday, here)
document.write("<p>Format: "+f+"</p>");

Output:

String: 18 February 1999 13:45:00
Format: %d %M %Y %H:%i:%s
like image 1
Niet the Dark Absol Avatar answered Oct 13 '22 20:10

Niet the Dark Absol