我有一个使用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这样做?或者我是否需要保存格式字符串以及区域设置(不是我的优先选项)
答案 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。