2010-10-13 126 views
5

在模板中我顯示特定日期的日和月:如何根據區域設置格式化日期?

<div class="jour"><?php echo date('d',strtotime($content->getCreatedAt())) ?></div> 
<div class="mois"><?php echo date('M',strtotime($content->getCreatedAt())) ?></div> 

這工作得很好,問題是月份名稱是英文的。我在哪裏指定我想在另一個語言環境中使用月份名稱,例如法語?

+0

我嘗試設置在settings.yml中的「default_culture」,但這並沒有改變任何東西 – Manu 2010-10-13 15:25:37

回答

5

Symfony在支持i18n的日期助手中有一個format_date助手。不幸的是,這些格式文檔記錄很糟糕,see this link對他們提示。

+2

是啊...這將是一個好得多的辦法做吧!然而,我將把我的答案作爲一般的PHP解決方案。 – lonesomeday 2010-10-13 20:17:46

+0

format_date可以顯示月份的名稱嗎?我似乎無法找到它的文件。 – Manu 2010-10-14 07:15:30

+0

沒關係,發現它 - http://trac.symfony-project.org/wiki/formatDateHowTo – Manu 2010-10-14 07:26:29

1

default_culture僅適用於symfony國際化框架,不適用於原生PHP函數。如果要寬更改此設置的項目,我會在config/ProjectConfiguration.class.php做到這一點,利用setlocale,然後用strftime而不是date

// config/ProjectConfigration.class.php 
setlocale(LC_TIME, 'fr_FR'); 

// *Success.php 
<div class="jour"><?php echo strftime('%d',strtotime($content->getCreatedAt())) ?></div> 
<div class="mois"><?php echo strftime('%b',strtotime($content->getCreatedAt())) ?></div> 

注意,這需要區域設置您的計算機上啓用。要檢查,請執行var_dump(setlocale(LC_ALL, 'fr_FR'));如果結果爲false,則不能使用setlocale來執行此操作,可能需要自己編寫翻譯代碼。此外,您需要在系統上安裝正確的語言環境。要檢查安裝了哪些語言環境,請在命令行上執行locale -a

+0

個人認爲'的strftime%X%X' PARAMS非常有用 – 2014-06-12 09:43:46

1

對不起,在當天晚些時候接吻,但我想在這裏添加自己的想法。我提出的最佳國際日期格式是「%e%b%Y」,例如2012年3月9日。我發現這比ISO格式「%Y-%m-%d」更可讀,例如, 2012-03-09。根據文檔,%x格式應該是區域設置敏感的,但它不適用於我,至少在iPhone上不適用。這可能是因爲Safari沒有通過HTML標頭中的區域設置,我不知道。

0

使用setlocale()具有不同可能值的數組有時很有用。 特別是支持不同的環境(在Windows,Linux,...)

setlocale(LC_TIME, array('fr', 'fr_FR', 'fr_FR.utf8', 'french', 'french_FRANCE', 'french_FRANCE.utf8')); 
echo strftime("%A %d %B", strtotime(date("Y-m-d"))); 

隨着文檔狀態:

如果區域是一個數組或之後附加的參數然後每個數組元素或參數是試圖將其設置爲新的區域,直到成功。如果在不同系統上以不同名稱知道區域設置,或者爲可能不可用的區域設置提供回退,這很有用。

相關問題