Подтвердить что ты не робот

Как определить формат даты и времени пользовательской локали

Есть ли возможность определить, с чистым Javascript, какое время времени FORMAT настроено пользователем в его операционной системе (Windows, Linux, MAC OS и т.д.)?

Спасибо заранее.

EDIT: Я знаю о методе toLocaleString(), но это не помогает мне получить формат, который клиент настроил на своей локальной машине.

4b9b3361

Ответ 1

Я написал что-то в чистом javascript, который работает в IE/Firefox/Chrome. Он выйдет из MM/DD/YYYY или DD/MM/YYYY,... в зависимости от toLocalDateString().

Не работает в Safari, но новый Date(). toLocalDateString() тоже не был.

Вот 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);

Ответ 2

Вот идея, которая может или не может работать.

Создайте дату, когда все элементы различны, например, 18 февраля 1999 года в 13:45, используйте toLocaleString(), затем идентифицируйте элементы на основе их различных значений.

Может быть сложно, и у меня нет кода, который мог бы с ним поработать, но это идея быть выброшена там, возможно, вы можете использовать его.


ИЗМЕНИТЬ: Вот код:

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>");

Вывод:

String: 18 February 1999 13:45:00
Format: %d %M %Y %H:%i:%s

Ответ 3

Что-то вроде этого?

<script type="text/javascript">

    var d=new Date();
    document.write("Original form: ");
    document.write(d + "<br />");
    document.write("Formatted form: ");
    document.write(d.toLocaleString());

    //calculate change of the 2 dates
</script>