Symfony / Стратегия: форматирование даты и времени на основе часового пояса? - PullRequest
0 голосов
/ 13 апреля 2011

В приложении Symfony ...

  1. Каков наилучший способ хранения информации о часовом поясе пользователя?

    • Находится ли она через культуру?
    • Какие стандартные ключи должны храниться?Использовать часовые пояса PHP и сохранять их как текст?
  2. Как отформатировать дату и время сервера на уровне представления?

    • Есть ли помощники PHP / Symfonyчто?

Ответы [ 2 ]

3 голосов
/ 12 мая 2012

Я использую следующую стратегию:

  • дата-время сервера - UTC
  • все даты управляются и хранятся в UTC
  • таблица профиля пользователя имеет поле часового пояса:введите текст, где хранится его PHP часовой пояс
  • пользователь может установить / изменить свой часовой пояс на странице своего профиля (выберите виджет sfWidgetFormI18nChoiceTimezone)
  • для отображения любой даты, я использую небольшой помощник utcToLocal_date, которые используют функцию format_date помощника Date:

.

function utcToLocal_date($originedatetime, $format = 'g')
{
    if (class_exists('sfContext', false) && sfContext::hasInstance() && sfConfig::get('sf_i18n'))
    {
        $timezone = sfContext::getInstance()->getUser()->getProfile()->getTimezone();
        if (!empty($timezone) && ($newtimezone = new DateTimeZone($timezone)))
        {
            $datetime = new DateTime($originedatetime);
            $datetime->setTimezone($newtimezone);
            $originedatetime = $datetime->format("Y-m-d H:i:s");
        }
    }
    if (function_exists('format_date'))
    {
        return format_date($originedatetime, $format);
    }
    return $originedatetime;
}
0 голосов
/ 13 апреля 2011

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

Для форматирования дат вы можете использовать помощник Date.Который, в свою очередь, использует класс sfDateFormat, который инициализируется текущим пользователем culture .Вы также можете использовать это для отображения часового пояса данной даты.

...