切换日期区域设置



有人能告诉我如何在Symfony2中切换区域设置日期格式吗?

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

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

当我输出默认区域设置时,它总是返回"de"BTW,无论我在config.yml 中设置了什么

echo  Locale::getDefault()

附加信息:

我希望能够在我的本地系统和实时服务器上正确输出日期(意思是正确的德语工作日)。使用strftime尝试了这一点,它使用系统安装的区域设置,但遇到了真正的问题,因为区域设置包在live和dev机器上有不同的命名方案。这里还有另一个SO问题:PHP:为什么我的日期在服务器上的格式不同?

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

它所做的只是通过嗅探会话和请求来配置Locale::getDefault()值。

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

这个捆绑包在扩展中添加了一些细枝过滤器,并提供了一些可以在任何地方使用的助手。

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

{{ my_date|format_datetime }}

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

我在项目中使用了这样的代码来格式化日期(您需要为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

但我没有为trick找到助手,所以您可以创建自己的

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

在"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

然后,在一个小树枝文件中,你可以这样做:

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

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

只需在config.yml 中添加分支扩展

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

在模板分支中Syntaxe:{{myDate|localizeddate("sizeDate"、"sizeHour"、"locale")}myDate:必须是DateTime对象sizeDate:可以是无/短/中/长/满sizeHour:可以是无/短/中/长/满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

别忘了清理你的缓存;)

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

最新更新