JavaScript - получить короткий формат даты системы

Есть ли способ получить короткий формат даты в JavaScript?

Например, будет ли короткая дата системы в американском формате, например. м/д/у или в европе, например. д/м/Y

Обратите внимание: Это не вопрос о дате форматирования или вычислении его на основе геолокации, а о получении формата из ОС/системы

Ответ 1

После небольшого исследования я пришел к выводу, что технически невозможно получить региональные настройки, а именно, формат даты, но вы можете сделать несколько других вещей. Выберите один из следующих вариантов: a) Вышеупомянутая и устаревшая функция "toLocaleString()":

var myDate = new Date(1950, 01, 21, 22, 23, 24, 225);
var myDateFormat = myDate.toLocaleString();
alert (myDateFormat);

ВОПРОСЫ:
1) Вы не можете "myDateFormat.replace", чтобы получить маску даты, поскольку месяц не сохраняется как "01", "02" и т.д. в строке, но вместо этого вместо текста используется язык (например, "февраль" на английском языке, но это "Φεβρουάριος" на греческом языке и кто знает, что, например, в клингоне). 2) Различное поведение в разных браузерах. 3) Различное поведение в разных версиях ОС и браузеров...

b) Используйте toISOString() вместо toLocaleString(). Вы не получите маску даты локали, но получите дату, с которой вы можете указать, где какая часть даты (т.е. где "месяц" или "день" находится в этой строке). Вы также можете работать с функциями getUTCDate(), getUTCMonth() и getUTCDay(). Вы по-прежнему не можете определить, какой формат даты использует клиент, но можете узнать, с каким годом/месяцем/днем ​​/и т.д. Вы работаете, когда вы берете дату; используйте code выше, чтобы проверить функции, упомянутые здесь, чтобы увидеть, что вы можете ожидать.

c) Прочитайте Непоследовательное поведение статьи toLocaleString() в разных браузерах и использование описанного там решения (IMHO great)

Ответ 2

Это невозможно. Вы можете получить культуру из пользовательского браузера и использовать некоторые библиотеки js для преобразования в правильный формат даты. http://code.google.com/p/datejs/

Ответ 3

Я сделал функцию для определения формата даты клиента. Функция определяет разделитель формата даты, а также определяет 1-ю, 2-ю и третью часть формата даты.

getDateFormat(){
    // initialize date value "31st January 2019"
    var my_date = new Date(2019,0,31);
    console.log(my_date.toLocaleDateString());
    // Initialize variables
    var separator="";
    var first="";
    var second="";
    var third="";
    var date_parts = [];

    // get separator : "-", "/" or " ", format based on toLocaleDateString function        
    if (my_date.toLocaleDateString().split("-").length==3){
        separator = " - ";
        date_parts = my_date.toLocaleDateString().split("-");
    } 
    if (my_date.toLocaleDateString().split("/").length == 3) {
        separator = " / ";
        date_parts = my_date.toLocaleDateString().split("/");
    } 
    if (my_date.toLocaleDateString().split(" ").length == 3) {
        separator = " ";
        date_parts = my_date.toLocaleDateString().split(" ");
    } 

    // get first part        
    if (date_parts[0]==2019){
        first ="yyyy";
    } else if (date_parts[0] == 31){
        first = "dd";
    } else{
        if (date_parts[0].length<=2){
            first ="mm";
        }
        else{
            first="mmm";
        }
    }

    // get second part        
    if (date_parts[1] == 2019) {
        second = "yyyy";
    } else if (date_parts[1] == 31) {
        second = "dd";
    } else {
        if (date_parts[1].length <= 2) {
            second = "mm";
        }
        else {
            second = "mmm";
        }
    }

    // get third part        
    if (date_parts[2] == 2019) {
        third = "yyyy";
    } else if (date_parts[2] == 31) {
        third = "dd";
    } else {
        if (date_parts[2].length <= 2) {
            third = "mm";
        }
        else {
            third = "mmm";
        }
    }

    // assembly
    var format = first + separator + second + separator + third;
    console.log(format);
    return format;
}

Ответ 4

Использовать Date.CultureInfo.formatPatterns.shortDate