Symfony / Strategy:根据时区格式化日期时间?

时间:2011-04-13 11:43:11

标签: datetime symfony1 internationalization timezone

在Symfony应用程序中......

  1. 存储用户时区信息的最佳方式是什么?

    • 是通过文化找到的吗?
    • 应存储哪些标准密钥?使用PHP时区并以文本形式存储?
  2. 如何在表示层上格式化服务器日期时间?

    • 有没有PHP / Symfony助手呢?

2 个答案:

答案 0 :(得分:3)

我使用以下策略:

  • 服务器日期时间为UTC
  • 所有日期均以UTC格式管理和存储
  • 用户个人资料表有一个text类型的时区字段,其中存储了他的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;
}

答案 1 :(得分:0)

关于你的第一个问题。 我不认为存储用户的时区,但当然可以。 但是,您应该检查default_timezone.settings下的settings.yml设置。

对于格式化日期,您可以使用Date帮助程序。然后使用sfDateFormat类,该类使用当前用户 culture 进行初始化。 您也可以使用它来显示给定日期的时区。