отображать системное время с тем же отображением формата на рабочем столе с помощью js [duplicate]

2017 ответ: теперь вы можете делать то, что хотите, в каждом текущем браузере и узле

. Это довольно просто:

  • Вернуть обещание
  • Используйте 'await' , в котором JavaScript ожидает, что обещание будет разрешено в vlue (например, hTTP-ответ)
  • Добавьте 'async' для родительской функции

Вот рабочая версия вашего кода:

(async function(){

var response = await superagent.get('...')
console.log(response)

})()

ожидание поддерживается во всех текущих браузерах и узлах 8 [/ д2]

10
задан Badr Hari 26 December 2014 в 18:56
поделиться

4 ответа

Это решение работает в большинстве браузеров, но ошибки в Chrome.

var date = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));
var dateString = date.toLocaleTimeString();

//apparently toLocaleTimeString() has a bug in Chrome. toString() however returns 12/24 hour formats. If one of two contains AM/PM execute 12 hour coding.
if (dateString.match(/am|pm/i) || date.toString().match(/am|pm/i) )
{
    //12 hour clock
}
else
{
    //24 hour clock
}

Обходной Chrome; Доказательство концепции

Это уродливая работа для Chrome. Он вынюхивает пользователей country_code через reverse geolocation. Этот код проверяется на массив со странами, использующими 12-часовую систему. Это решение является уродливым, потому что вам нужно разрешение пользователя на получение геолокационных данных, и если локаль пользователей отличается, это даст неверную информацию, но предоставит вам страну пользователя. Я настоятельно рекомендую использовать этот пример. Это чисто для вдохновения. Я сделал это доказательством концепции.

function getClockChrome() {

    navigator.geolocation.getCurrentPosition(function(pos) {
        var url = "http://nominatim.openstreetmap.org/reverse?format=json&lat="+pos.coords.latitude+"&lon="+pos.coords.longitude+"&addressdetails=1&accept-language=en_US&json_callback=chromeClockCallBack";
        var script = document.createElement('script');
        script.src = url;
        document.body.appendChild(script);
    },

    function()
    {
        //no access to location
    },


    {
      enableHighAccuracy: true,
      timeout: 5000,
      maximumAge: 0
    }
    );

}

getClockChrome();

var dateCountryCode = ['US', 'GB', 'PH', 'CA', 'AU', 'NZ', 'IN', 'EG', 'SA', 'CO', 'PK', 'MY'];
function chromeClockCallBack(data)
{
    //Request succeeded
    if (dateCountryCode.indexOf(data.address.country_code.toUpperCase()) > -1)
    {
        alert("12 hour clock");
    }
    else
    {
        alert("24 hour clock");
    }
}
5
ответ дан Mouser 27 August 2018 в 02:36
поделиться

toLocaleTimeString должен предоставить время в формате, который отражает предпочтения пользователя, но он ненадежен.

Я нахожусь в системе Debian. Выход locale:

LANG=en_US.utf8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=

Вот несколько экспериментов с date:

$ date +%X
05:23:32 PM
$ LANG=en_GB date +%X
17:24:06
$ LC_TIME=en_GB date +%X
17:24:22

Формат %X сообщает date, чтобы вывести время согласно языку. Результаты, приведенные выше, точно так же, как ожидалось. Установка LC_TIME - это способ изменить только формат времени, но сохранить целостность всего остального в локали. Поэтому кто-то из США может использовать формат 24h, даже если по умолчанию для en_US равно 12.

Я пробовал скрипт Mouser в моей системе:

$ firefox --no-remote
[Shows a time in the 12 hour format, as expected.]
$ LANG=en_GB firefox --no-remote
[Shows a time in the 24 hour format, as expected.]

Пока все хорошо. Однако,

$ LC_TIME=en_GB firefox --no-remote
[Shows a time in the 12 hour format, this is wrong!]

Я получаю те же результаты с Chrome. Кажется, что Firefox и Chrome игнорируют LC_TIME.

2
ответ дан Community 27 August 2018 в 02:36
поделиться

Эта простая строка работает для меня.

var is24 = ((new Date(2014, 01, 01, 15, 0, 0, 0)).toLocaleTimeString().indexOf("15") > -1);

Хотя она по-прежнему не работает в Chrome (работает в IE и Firefox)

0
ответ дан David 27 August 2018 в 02:36
поделиться

Помимо того, что этот никогда не должен выполняться , .toLocaleTimeString() не будет хорошим решением, даже если он работает в браузерах. Он возвращает строку времени, следуя формату, установленному на компьютере пользователя, но возможно иметь 24-часовые часы, которые все еще показывают AM / PM, а также 12-часовые часы, которые этого не делают. Невозможно точно или надежно обнаружить это.

0
ответ дан Hydrothermal 27 August 2018 в 02:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: