我已经在服务器上安装了Intl。
我把default_timezone
改成了欧洲/伊斯坦布尔,把intl.default_locale
改成了tr_tr。
我还在用英语记约会对象的名字。
我错过了什么?
我应该更改一些其他设置吗?
我建议使用IntlDateFormatter
。这在PHP的intl
模块中是可用的,从这个问题的标题来看,这个扩展是可用的。
示例/粗略实现:
$locale = 'tr_TR'; // a canonicalized locale
$format = 'MMM e'; // ISO format codes, not the typical date ones
$dt = new DateTime(); // a DateTime object
$df = new IntlDateFormatter(
$locale, // string locale
IntlDateFormatter::NONE, // int date type
IntlDateFormatter::NONE, // int time type
'UTC', // string timezone
IntlDateFormatter::GREGORIAN, // int cal type
$format // string pattern
);
var_dump($dt->format('c')); // string '2014-06-25T08:22:48-07:00' (length=25)
var_dump($df->format($dt)); // string 'Haz 3' (length=5)
首先,使用任何Intl*类都是有益的,因为您不需要使用setlocale
或Locale::setDefault
不断重置PHP的运行时区域设置(这可能会导致IMO混乱(。这允许您以一种非常结构化的方式轻松地输出/格式化不同的区域设置。它还推动使用PHP5的新OOPness——不再是date
的废话,现在应该使用DateTime
。
IntlDateFormatter构造函数有一个相当长的签名,如下所示:
$locale
-一个规范化的区域设置,通过Locale::canonicalize
筛选您选择的区域设置可以确保您得到了正确的区域设置$dateType
-我将其设置为"none"(int-1
(,并使用格式参数($pattern
(以获得最大的灵活性。也接受"short"、"medium"、"long"one_answers"full"。你可以在ICU项目文档中阅读更多关于它们的信息$timeType
-与$dateType
相同,但处理时间$timezone
-这不是DateTimeZone
的实例,而是一个字符串时区。PHP的Date
类与intl的类不兼容(某些内置适配器除外,如IntlDateFormatter::format
方法($calendar
-通常为格里高利(null
(,但也可以接受IntlCalendar
的实例$pattern
-要使用的解析/渲染格式,请将其视为等效于date
的第一个参数。然而,它们并不相同:ICU(该类使用的下属库(采用了Zend Framework文档中详细记录的ISO格式。例如,您将使用'yyyy'
,而不是使用'Y'
表示4位数的年份。ISO格式比PHP格式健壮得多
一旦有了IntlDateFormatter
的实例和DateTime
对象,就可以使用IntlDateFormatter::format
将两者粘合在一起,以给定的格式(如前所述(在给定的区域设置中呈现出包含所需日期/时间的字符串。format
方法只接受一个参数:DateTime
的一个实例——小菜一碟!
$instanceOfIntlDateFormatter->format($instanceOfDateTime);
另外,format
方法可以接受各种各样的对象(类型为mixed
(,引用:
要格式化的值。这可能是
DateTime
对象、IntlCalendar
对象,一种数字类型,表示从epoch开始的秒或CCD_ 36输出的格式的数组。
关于时区参数的注意事项:DateTime
在PHP 5.5.0版本中发生了更改。我使用了以下方法(记不清细节,自己解决(。。。
$timezoneForIntl = $instanceOfDateTime->getTimezone();
if ( version_compare(PHP_VERSION,'5.5.0','<') ) {
$timezoneForIntl = $timezoneForIntl->getName();
}
<?php
setlocale(LC_ALL, 'tr_TR.UTF-8');
echo strftime("%e %B %Y %A", time());
?>
打印:30 Ekim 2015 Cuma
代码运行良好。
public function getTurkishDate(){
$locale = 'tr_TR'; // a canonicalized locale
$format = 'dd-MMMM-YYYY'; // ISO format codes, not the typical date ones
$dt = new DateTime(); // a DateTime object
$df = new IntlDateFormatter(
$locale, // string locale
IntlDateFormatter::NONE, // int date type
IntlDateFormatter::NONE, // int time type
'UTC', // string timezone
IntlDateFormatter::GREGORIAN, // int cal type
$format // string pattern
);
return $df->format($dt); //string 07-Ağustos-2018
}