如何根据区域设置格式化日期?

时间:2010-10-13 14:43:22

标签: php date symfony1 locale setlocale

在模板中,我显示特定日期的日期和月份:

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

这个工作正常,问题是月份名称是英文的。我在哪里指定我想要另一个语言环境中的月份名称,例如法语?

4 个答案:

答案 0 :(得分:5)

Symfony在支持i18n的Date帮助程序中有一个format_date帮助程序。不幸的是,这些格式记录不清,see this link提示它们。

答案 1 :(得分: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

答案 2 :(得分:1)

很抱歉在当天这么晚,但我想在这里添加自己的想法。我提出的最佳国际日期格式是“%e%b%Y”,例如: 2012年3月9日。我发现这比ISO格式“%Y-%m-%d”更具可读性,例如2012-03-09。根据文档,%x格式应该是区域敏感的,但它对我不起作用,至少在iPhone上不起作用。这可能是因为Safari不会在HTML标题中传递区域设置,我不知道。

答案 3 :(得分: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")));

正如文件所述:

  

如果locale是一个数组或后跟其他参数,则尝试将每个数组元素或参数设置为新的语言环境,直到成功为止。如果在不同系统上以不同名称知道语言环境或为可能不可用的语言环境提供回退,这将非常有用。

相关问题