切换日期区域设置

时间:2012-02-13 16:14:11

标签: datetime localization symfony

有人能告诉我如何在Symfony2中切换语言环境日期格式吗?

无论我在config(framework.session.default_locale)中设置什么,这总是以英语返回工作日(我需要工作日用德语):

$start->format("D d.m.Y");

当我输出默认语言环境时,它总是返回“de”BTW,无论我在config.yml中设置什么

echo  \Locale::getDefault()

其他信息:

我希望能够在我的本地系统和实时服务器上正确输出日期(意味着正确的德语工作日)格式化日期。尝试使用strftime,它使用系统安装的语言环境并且遇到了麻烦,因为语言环境包在live和dev机器上有不同的命名方案。 这里还有另外一个问题: PHP: why is my date formated on the server differently?

5 个答案:

答案 0 :(得分:8)

Symfony2在其核心中没有提供任何日期格式化程序。

所有这一切都是通过嗅探会话和请求来配置\Locale::getDefault()值。

您必须提供一些额外的服务来处理每个区域设置格式,例如SonataIntlBundle

此捆绑包在扩展中添加了一些树枝过滤器,并提供了一些可以在任何地方使用的帮助程序。

激活后,您可以在模板中使用它们,例如:

{{ my_date|format_datetime }}

此处有更多信息:https://github.com/sonata-project/SonataIntlBundle/blob/master/Resources/doc/reference/datetime.rst

答案 1 :(得分:4)

我使用这样的代码来格式化我的项目中的日期(你需要打开php的intl扩展名):

<?php
    class DefaultController extends Controller {
        public function indexAction() {
            $date = new \DateTime("now");
            $formatter = new \IntlDateFormatter(\Locale::getDefault(), \IntlDateFormatter::NONE, \IntlDateFormatter::NONE);
            $formatter->setPattern("EEEE Y-M-d");
            return array('locale' => \Locale::getDefault(), "intl" => $formatter->format($date));
    }

它对我来说很好。如何创建您可以找到的格式模式 http://userguide.icu-project.org/formatparse/datetime

但是我找不到树枝的助手,所以你可以创建自己的

答案 2 :(得分:2)

更简单的方法是将格式存储在翻译文件中,如下所示:

在“messages。 en .yml”文件中:

date.format: m/d/Y
time.format: g:i A

在“messages。 fr .yml”文件中:

date.format: d/m/Y
time.format: H:i

然后,在twig文件中,您可以这样做:

{{ my_date|date('date.format'|trans) }}

因此,使用当前区域设置,日期将自动采用正确的格式。

答案 3 :(得分:2)

只需在config.yml中添加twig扩展名

services:
    twig.extension.intl:
        class: Twig_Extensions_Extension_Intl
        tags:
            - { name: twig.extension }

在你的模板树枝上 语法:{{myDate | localizeddate('sizeDate','sizeHour','locale'}} myDate:必须是DateTime对象 sizeDate:可以是none / short / medium / long / full sizeHour:可以是none / short / medium / long / full locale:默认情况下是可选的会话语言,但您可以强制使用一个不同的语言环境值

{{ myDate | localizeddate('full', 'none') }} ({{ myDate | localizeddate('none', 'short') }})
<!--
locale "fr" : vendredi 21 décembre 2012 (13:37)
locale "en : Friday, December 21, 2012 (13:37 PM)
-->

如果您收到错误“请安装'intl'扩展程序以获得完全本地化功能

安装php5-intl包 例如。在Debian服务器上,命令将是:     apt-get install php5-intl

别忘了清除缓存;)

答案 4 :(得分:0)

为此目的有一个包:https://github.com/michelsalib/BCCExtraToolsBundle 比奏鸣曲项目更容易使用。 :)