如何使用实际月份名称格式化具有区域设置首选日期格式的日期?

时间:2014-03-08 22:25:34

标签: php yii

我有一个使用Yii的项目,它是为支持多种语言而构建的。使用setlocale我可以执行以下操作:

setlocale(LC_TIME, 'en_US', 'English');
echo strftime('%x', mktime(0, 0, 0, 12, 25, 2014));

// outputs '12/25/2014'


setlocale(LC_TIME, 'fr_FR', 'French_France')
echo strftime('%x', mktime(0, 0, 0, 12, 25, 2014));

// outputs '25/12/2014'

这几乎是我所需要的,但是,我想以首选格式打印出月份的实际名称而不仅仅是数字。例如,对于美国英语我想输出:

  

2014年12月25日

对于法语,我想输出:

  

2014年12月25日

这必须适用于使用该语言环境的特定格式规则提供的任何语言环境(多个国家/地区),法语和英语只是示例。有没有类似的“自动”方式与Yii或只是PHP这样做?或者我是否需要保存格式字符串以及区域设置(不是我的优先选项)

2 个答案:

答案 0 :(得分:1)

Yii的应用程序对象具有dateFormatter属性,可让您访问CDateFormatter个对象;您可以根据应用程序的format dates将此对象用于current language

您可以在entry script中设置此语言,也可以将其推迟到稍后的某个时间点(当然还在开始生成内容之前),例如基本控制器的init方法。

一个例子:

$time = mktime(0, 0, 0, 12, 25, 2014);
$app = Yii::app();
$app->language = 'fr_fr'; // yii uses all lowercase

echo $app->dateFormatter->formatDateTime($time, 'long', null);

在上面的代码段中,'long'对应于指定区域设置的日期格式d MMMM y(Yii使用CLDR specification作为格式字符串;此预设相当于{{1 Yii术语中的规范)和%x指示格式化程序根本不在结果中包含时间信息。

如果您愿意,也可以自己手动指定格式:

null

答案 1 :(得分:0)

在Yii 2中:

// set locale
Yii::$app->language = 'fr-FR';

// ouput locale date
Yii::$app->formatter->asDate(timestampOrValidDate, [format]);
Yii::$app->formatter->asDate(time()); // outputs "18 Oct 2019" for en-GB
Yii::$app->formatter->asDate('2019-12-31'); // outputs "31.12.2019" for german locale

请参见guide