格式化DateTime对象,尊重Locale :: getDefault()

我有一个DateTime对象,目前我正在通过

$mytime->format("D dmY") 

这给我完全我需要的格式:

二零一二年五月二十三日

唯一缺less的一点是正确的语言。 我需要TueTuesday )的德文译本,即DieDienstag )。

这给了我正确的区域设置

 Locale::getDefault() 

但是我不知道如何告诉DateTime::format来使用它。

没有办法做到这样的事情:

 $mytime->format("D dmY", \Locale::getDefault()); 

这是因为format不关注区域设置。 你应该使用strftime

例如:

 setlocale(LC_TIME, "de_DE"); //only necessary if the locale isn't already set $formatted_time = strftime("%a %e.%l.%Y", $mytime->getTimestamp()) 

您可以使用Intl扩展名格式化date。 它将根据所选的区域设置格式化date/时间,或者可以使用IntlDateFormatter::setPattern()覆盖该date/时间。

使用自定义模式的一个快速示例,对于您所需的输出格式,可能看起来像。

 $dt = new DateTime; $formatter = new IntlDateFormatter('de_DE', IntlDateFormatter::SHORT, IntlDateFormatter::SHORT); $formatter->setPattern('E dMyyyy'); echo $formatter->format($dt); 

其中输出以下(至less今天,至less)。

迪。 2013年6月4日


编辑 :啊嘘! 回答了一个古老的问题,因为一些评论碰到了名单! 现在至less提到Intl选项。