yii 如何使用区域设置首选日期格式和实际月份名称来设置日期格式?

a7qyws3x  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(188)

我有一个使用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日
这必须适用于任何提供的区域设置(多个国家),并使用该区域设置的特定格式规则,法语和英语只是例子。有没有类似的“自动”方式在Yii或php中实现?或者我需要保存一个格式字符串沿着区域设置(不是我的首选选项)

ndasle7k

ndasle7k1#

Yii的应用程序对象有一个dateFormatter属性,它允许您访问CDateFormatter对象;您可以使用该对象根据应用程序的当前语言设置日期格式。
您可以在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规范的格式字符串;该预置在Yii方面等同于%x规范),并且null指示格式化器在结果中根本不包括时间信息。
如果要执行以下操作,也可以手动指定格式:

echo $app->dateFormatter->format('d MMMM y', $time);
kqlmhetl

kqlmhetl2#

在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

相关问题