. Это довольно просто:
Вот рабочая версия вашего кода:
(async function(){
var response = await superagent.get('...')
console.log(response)
})()
ожидание поддерживается во всех текущих браузерах и узлах 8 [/ д2]
Это решение работает в большинстве браузеров, но ошибки в 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");
}
}
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
.
Эта простая строка работает для меня.
var is24 = ((new Date(2014, 01, 01, 15, 0, 0, 0)).toLocaleTimeString().indexOf("15") > -1);
Хотя она по-прежнему не работает в Chrome (работает в IE и Firefox)
Помимо того, что этот никогда не должен выполняться , .toLocaleTimeString()
не будет хорошим решением, даже если он работает в браузерах. Он возвращает строку времени, следуя формату, установленному на компьютере пользователя, но возможно иметь 24-часовые часы, которые все еще показывают AM / PM, а также 12-часовые часы, которые этого не делают. Невозможно точно или надежно обнаружить это.