我有一个脚本需要向国际观众显示日期数据,例如:
"提交于Tue 25 Aug 09"
有没有更简单/更清晰的方法将其转换为法语(等等)的等效形式 "Mar 25 Aoû 09",而不是:
设置常数LANG
和包含文件的$LANGUAGES
数组并使用:
if(LANG != 'EN')
{
include $LANGUAGES['LANG'];
}
&然后包含的文件映射天数和月份,并替换为适当的区域设置吗?
我有一个脚本需要向国际观众显示日期数据,例如:
"提交于Tue 25 Aug 09"
有没有更简单/更清晰的方法将其转换为法语(等等)的等效形式 "Mar 25 Aoû 09",而不是:
设置常数LANG
和包含文件的$LANGUAGES
数组并使用:
if(LANG != 'EN')
{
include $LANGUAGES['LANG'];
}
&然后包含的文件映射天数和月份,并替换为适当的区域设置吗?
<?php
setlocale(LC_ALL, 'fr_FR');
echo strftime("%A %e %B %Y");
?>
strftime()
而不是date()
。 - dcousineau%e
参数在文档中已经说明在Windows上不起作用。您必须进行额外的检查,示例在strftime()文档的Example #3 Cross platform compatible example using the %e modifier下显示。 - Stanstrftime
和setlocale
函数是最好的方法。但是如果你的服务器没有安装所需的区域设置(在当前问题中是fr_FR
),它将无法正常工作。
如果区域设置更改失败,下面的代码将抛出异常。
<?php
$result = setlocale(LC_ALL, 'fr_FR');
if($result === false){
throw new \RuntimeException(
'Got error changing locale, check if locale is installed on the system'
);
}
$dayOfMonth = '%e';
//if it is Windows we will use %#d as %e is not supported
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
$dayOfMonth = '%#d';
}
//Mar 25 Aoû 09 - month shortname, day of month, day shortname, year last two digits
echo strftime("%b $dayOfMonth %a %y");