Archive for May, 2010

Отображение даты в часовом поясе пользователя

Friday, May 21st, 2010

Есть список событий с датами, который необходимо отобразить пользователю. Пользователь может находиться в любом часовом поясе и, соответственно, время будет разное для разных часовых поясов.
Время в базе хранится по гринвичу, т.е. GMT.
Для инициализации объекта Date надо передать строку одного из определенных форматов (‘YYYY-MM-DD HH:II:SS’ в их число не входит), в большинстве фреймворков есть инструменты для форматирования вывода прямо в шаблоне, если вы пишите без них – используйте функции аля:
string date ( string $format [, int $timestamp ] )
в php и им подобные. В django это будет так:

<span class="datetime" {{ row.datetimegmt|date:"M d, Y H:m:s" }} GMT</span>

На выходе соответсвенно получаем:

<span class="datetime">May 21, 2010 23:05:00 GMT</span>

А дальше все просто, создаем объект Datetime, так как мы явно указали зону (GMT) в конце – то дата будет корректна иниуцилизирована, а при выводе отобразиться в пользовательской часовой зоне:

    $(".datetime").each(function() {
        var d = new Date($(this).text());
        var local_date = d.format('Y-m-d H:i'); 
        $(this).text(local_date);
    });

Формат может задать свой или использовать функции toString(), toLocaleString(), но мне их вывод показался диковатым для пользователя, поэтому использовалась javascript-реализация аналогичная php варианту format(), доступная здесь