2012-02-13 106 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-國際

不要忘記清除緩存;)