PHP date()在外语中的表达 - 例如:3月25日 8月09日

25

我有一个脚本需要向国际观众显示日期数据,例如:

"提交于Tue 25 Aug 09"

有没有更简单/更清晰的方法将其转换为法语(等等)的等效形式 "Mar 25 Aoû 09",而不是:

设置常数LANG和包含文件的$LANGUAGES数组并使用:

if(LANG != 'EN')
{
include $LANGUAGES['LANG'];
}

&然后包含的文件映射天数和月份,并替换为适当的区域设置吗?


请参见 https://dev59.com/bnNA5IYBdhLWcg3wC5NR。 - Stefan Gehrig
3个回答

54

5
这是处理日期字符串中区域设置的正确/PHP方式。当您需要考虑区域设置时,建议使用strftime()而不是date() - dcousineau
以上代码在Windows上无法工作,因为%e参数在文档中已经说明在Windows上不起作用。您必须进行额外的检查,示例在strftime()文档Example #3 Cross platform compatible example using the %e modifier下显示。 - Stan
4
无法在我的 Linux 上运行(指某个应用或软件)。它仍然是英文界面。 - user5147563
1
这是一个旧帖子,但我可能要补充说明的是,如果您想在PHP中设置另一种语言环境,或者至少让它发生改变,那么您需要在实际服务器上安装该语言环境(至少在Linux下)。 - M. Eriksson
1
这曾经是一个很好的答案,但根据https://www.php.net/strftime,自PHP 8.1起已将其弃用。 - MrSnoozles
1
请查看我的更新答案,了解如何在2022年实现此操作:https://dev59.com/2Woy5IYBdhLWcg3wJKvR#73250691 - MrSnoozles

6
根据 date 函数的手册页面,您应该使用 setlocale。然后,像 strftime 这样的方法将使用指定的语言环境。不过,由于某种原因,date 不会这样做。

4
我认为使用strftimesetlocale函数是最好的方法。但是如果你的服务器没有安装所需的区域设置(在当前问题中是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"); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接