Если вам (и вашему веб-сайту) нравится 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);