2012-02-13 68 views
7

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

不管我在配置(framework.session.default_locale)设置,这总是返回工作日在英语(我需要在德语工作日):

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

当我输出的默认语言环境它总是returnes“德”顺便说一句,不管我设置的config.yml

echo \Locale::getDefault() 

附加INFOS:

我希望能够以一种方式,它格式化日期在我的本地系统上和正在运行的服务器上正确输出(意味着德语为正确的工作日)。尝试使用strftime,它使用系统的安装语言环境,并带有真正的麻烦,因为语言环境包在活动和开发机器上具有不同的命名方案。 这里有这方面的另一个问题SO: PHP: why is my date formated on the server differently?

+0

见http://stackoverflow.com/a/23424315/1001110 – 2014-05-06 12:48:53

回答

3

我用这样的代码在我的项目格式化日期(您需要打开intl extension for php):

<?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

但我没有发现树枝一个帮手,这样你就可以创建自己的

8

Symfony2中不提供其核心的任何日期格式。

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

您必须提供一些额外的服务来处理每种语言环境的格式,例如SonataIntlBundle

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

一旦被激活,你可以在你的模板中使用它们,例如:

{{ my_date|format_datetime }} 

更多的相关信息在这里:https://github.com/sonata-project/SonataIntlBundle/blob/master/Resources/doc/reference/datetime.rst

+2

感谢您指出不存在Symfony即装即用的功能。但是必须有一些方法才能使用Intl来运行。我看了一下SonataIntlBundle的代码,但我不明白。 我感觉就像火星一样,我真的是唯一一个有这个问题的人? – stoefln 2012-02-16 12:56:35

+0

很多来自奏鸣曲的东西都可以让你觉得你在火星上:)但symfony相关代码的很多部分就是这样:)当然,你可以直接使用Intl *类,并使用$ session-> getLocale () 管他呢。 – Florian 2012-02-16 14:22:08

+0

现在我明白了,有一些对我来说很有价值的信息:用户语言环境在登录时被设置,所以在用户注销并重新登录之前更改配置不会产生任何影响。谢谢! – stoefln 2012-02-23 14:09:16

1

一个更简单的方法是将格式存储在翻译文件,像这样:

在文件 “的消息EN .yml”:

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

在“消息FR .yml”文件:

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

然后,在树枝的文件,你可以这样做:

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

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

+0

这是IMO最简单的方法。它使您可以定义长,短等格式,只需使用它们而无需任何额外的捆绑包。 – 2015-04-01 11:08:07

+0

这里唯一的问题是,日期和月份的名称不会被翻译。 – 2015-04-01 11:15:14

2

只需在您config.yml

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

添加树枝伸展在模板枝杈 Syntaxe:{{指明MyDate | sizeDate:'sizeDate','sizeHour','locale'}} sizeDate:可以是none/short/medium/long/size可以是none/short/medium/long/full sizeDate:全 区域设置:默认情况下,可选的会话语言会使用,但你可以强制一个不同势区域值

{{ 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) 
--> 

如果你得到一个错误“请安装‘国际’延伸完全本地化能力

安装php5-intl软件包 例如在Debian服务器上的co mmand将是: 的apt-get安装PHP5-国际

不要忘记清除缓存;)