我已经将Intl安装到我的服务器上。
我已将default_timezone
更改为欧洲/伊斯坦布尔,intl.default_locale
更改为tr_TR。
我仍然用英语获取日期名称。
我缺少什么?
我应该更改其他一些设置吗?
答案 0 :(得分:4)
我建议使用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
或{{不断重置PHP的运行时语言环境(这可能会导致混乱的IMO) 1}}。这使您可以以非常结构化的方式轻松地使用不同的区域设置输出/格式化。它还推动使用PHP5的新OOPness - 不再是Locale::setDefault
废话,你现在应该使用date
。
IntlDateFormatter构造函数具有相当长的签名,如下所示:
DateTime
- 规范化的区域设置,您可以通过Locale::canonicalize
过滤所选的区域设置,确保获得正确的区域设置。$locale
- 我将此设置为“没有”' (int $dateType
)并使用format参数(-1
)以获得最大的灵活性。接受'短','中'' long'' full'同样。您可以在ICU project docs。$pattern
- 与$timeType
相同,而是处理时间。$dateType
- 这是不 $timezone
的实例,而是字符串时区。 PHP的DateTimeZone
类与intl的类不兼容(例外情况是使用某些内置适配器,例如Date
方法)。IntlDateFormatter::format
- 通常是Gregorian($calendar
),但也可以接受null
的实例。IntlCalendar
- 要使用的解析/渲染格式,请将此视为等同于$pattern
的第一个参数。但是,它们不是相同的:ICU(此类使用的底层库)采用了Zend Framework docs中详细记录的ISO格式。例如,您可以使用date
,而不是将'Y'
用于4位数年份。 ISO格式比PHP更强大。一旦你有'yyyy'
的实例,以及一个IntlDateFormatter
对象,你可以将两者粘合在一起,在给定的语言环境中渲染出一个包含你想要的日期/时间的字符串。使用DateTime
给定格式(如前所述)。 IntlDateFormatter::format
方法接受一个参数:format
的一个实例 - 一块蛋糕!
DateTime
作为奖励,$instanceOfIntlDateFormatter->format($instanceOfDateTime);
方法可以采用各种对象(format
类型),引用:
要格式化的值。这可能是
mixed
个对象,DateTime
object,表示(可能是分数)数字的数字类型 自纪元以来的秒数或IntlCalendar
输出格式的数组。
有关时区参数的说明:localtime()
在PHP 5.5.0版本中更改。我已经使用以下方法作为解决方法(无法记住细节,自己解决)...
DateTime
答案 1 :(得分:1)
<?php
setlocale(LC_ALL, 'tr_TR.UTF-8');
echo strftime("%e %B %Y %A", time());
?>
打印出来:30 Ekim 2015 Cuma
代码工作正常。
答案 2 :(得分:0)
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
}