Как показать время UTC местным временем на веб-странице?

У меня есть база данных, которая содержит время как UTC. Это время можно показать на веб-странице, таким образом, меня попросили показать ее местным временем на странице, поскольку она может быть просмотрена из любой страны. Коллега упомянул что-то о получении настроек страны от текущего потока (на сервере), но я не мог найти детали об этом. То, что я хочу сделать возможный?

16
задан Vadim Kotov 11 August 2017 в 14:05
поделиться

4 ответа

Если вы (и ваш веб-сайт) знакомы с javascript, есть очень простой способ сделать это.

Во-первых, на стороне сервера у вас должна быть дата / время UTC, отформатированные в формате RFC 3339 (стандарт времени в Интернете, используемый, среди других протоколов, icalendar). Базовый синтаксис RFC 3339:

YYYY-MM-DDTHH:MM:SS

Таким образом, где я нахожусь, время будет:

2010-05-04T05:52:33

Но когда время не локальное, а UTC, вы добавляете Z в конец к обозначить это. Так что в моем случае, поскольку я нахожусь на -0500 часов от GMT, то же время, указанное выше, будет:

2010-05-04T10:52:33Z

Итак, сначала вы заставляете сервер выводить указанное выше в javascript вашей веб-страницы. Затем javascript может проанализировать эту метку времени и выведет дату и время, скорректированные с учетом часового пояса браузера (который определяется компьютером, на котором установлен браузер). Вы должны помнить, что если пользователь из Токио и просматривает ваш веб-сайт в Испании, он будет видеть метку времени в токийском времени, если только они не настроили часы своего компьютера.

Таким образом, javascript будет выглядеть так:

    var time_string_utc = some_server_variable; // timestamp from server
    var time_string_utc_epoch = Date.parse(time_string_utc);
    var time_utc = new Date();
    time_utc.setTime(time_string_utc_epoch);

На этом этапе у вас есть объект даты javascript, установленный на метку времени в формате UTC.Краткое объяснение того, что происходит выше:

Первая переменная предполагает, что вы передали строку с меткой времени этой переменной с сервера.

Вторая переменная использует метод Date.parse () для преобразования строки в метку времени эпохи.

Третья переменная создает неустановленный объект Date.

В последней строке используется метод setTime , который устанавливает объект Date из метки времени эпохи.

Теперь, когда у вас есть объект, вы можете вывести его пользователю по своему усмотрению. В качестве простого эксперимента вы можете использовать:

document.write(time_utc);

который, если вы находитесь в моем часовом поясе, используя метку времени UTC, с которой я начал:

2010-05-04T10:52:33Z

даст:

 Tue May 04 2010 05:52:33 GMT-0500 (CST)

, но вы можете использовать различные методы javascript для форматирования времени в что-то гораздо более приятное на вид.

Нет необходимости угадывать страну пользователя или даже настраивать метку времени, если вы доверяете локальному часовому поясу браузера / компьютера пользователя.

Опять же, краткая версия:

    var time_string_utc = some_server_variable; // UTC time from server
    var time_string_utc_epoch = Date.parse(some_server_variable);
    var time_utc = new Date();
    time_utc.setTime(time_string_utc_epoch);
    document.write(time_utc);
20
ответ дан 30 November 2019 в 22:17
поделиться

Конечно, возможно. Вам просто нужно найти, что настройки страны , чтобы определить страну, из которой прибыл ваш пользователь, а затем изменить отображаемую дату, чтобы она соответствовала времени этой страны. Вы также можете найти другой способ определить страну пользователя. (Возможно, из его IP-адрес).

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

0
ответ дан 30 November 2019 в 22:17
поделиться

РЕДАКТИРОВАТЬ:

Если подумать, я не думаю, что можно отображать местное время, если у вас есть культура клиента. Конечно, мне было бы интересно увидеть предложение ваших коллег.

Знакомство с культурой США, например, не поможет, поскольку в США много часовых поясов.

Я думаю, что использование Javascript, как предлагает Энтони, было бы правильным решением ...

СТАРЫЙ:

Вы можете переопределить метод InitializeCulture () кодом, который устанавливает текущий (выбранный или отчеты браузера) культуры:

Thread.CurrentThread.CurrentCulture = 
            CultureInfo.CreateSpecificCulture(selectedLanguage);
Thread.CurrentThread.CurrentUICulture = new 
            CultureInfo(selectedLanguage);
0
ответ дан 30 November 2019 в 22:17
поделиться

Также рассмотрите возможность прочтения этой темы, которая более подробно описывает дозы и запреты при работе с проблемой перехода на летнее время в разных часовых поясах

1
ответ дан 30 November 2019 в 22:17
поделиться
Другие вопросы по тегам:

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