我正在尝试使用date()
以意大利格式输出日期,如下所示:
<?php
setlocale(LC_ALL, 'it_IT');
echo date("D d M Y", $row['eventtime']);
?>
然而,它仍然以英文格式出现。我还能做什么?有什么不对?
解决方案必须是特定于脚本的,而不是服务器范围的......
由于
沙迪
答案 0 :(得分:39)
date()
不支持区域设置。您应该使用strftime()
及其格式说明符输出区域设置感知日期(来自date()
PHP手册):
要格式化其他语言的日期, 你应该使用
setlocale()
和strftime()
功能代替date()
关于Anti Veeranna的评论:他是完全正确的,因为你必须非常小心设置语言环境,因为它们有时不限于当前的脚本范围。最好的方法是:
$oldLocale = setlocale(LC_TIME, 'it_IT');
echo utf8_encode( strftime("%a %d %b %Y", $row['eventtime']) );
setlocale(LC_TIME, $oldLocale);
答案 1 :(得分:3)
it_IT语言环境必须由服务器管理员安装/启用,否则无效。
所以,乔纳森的解决方案可能是最好的。
答案 2 :(得分:3)
我发现setlocale
不可靠,因为它是按进程设置的,而不是每个线程设置的(手册提到了这一点)。这意味着其他正在运行的脚本可以随时更改区域设置。解决方案是使用intl
php扩展中的IntlDateFormatter。
$fmt = new \IntlDateFormatter('it_IT', NULL, NULL);
$fmt->setPattern('d MMMM yyyy HH:mm');
// See: http://userguide.icu-project.org/formatparse/datetime for pattern syntax
echo $fmt->format(new \DateTime());
如果它不起作用,您可能需要:
安装intl
php扩展程序(ubuntu示例):sudo apt-get install php5-intl
安装您要使用的区域设置:sudo locale-gen it_IT
答案 3 :(得分:2)
答案 4 :(得分:0)
关于http://www.phpnews.it/articoli/ottenere-date-in-italiano/response上的文章,博客建议了另一种方法,但代码不起作用,这里是正确的代码:
function timestamp_to_date_italian($date)
{
$months = array(
'01' => 'Gennaio',
'02' => 'Febbraio',
'03' => 'Marzo',
'04' => 'Aprile',
'05' => 'Maggio',
'06' => 'Giugno',
'07' => 'Luglio',
'08' => 'Agosto',
'09' => 'Settembre',
'10' => 'Ottobre',
'11' => 'Novembre',
'12' => 'Dicembre');
list($day, $month, $year) = explode('-',date('d-m-Y', $date));
return $day . ' ' . $months[$month] . ' ' . $year;
}
答案 5 :(得分:0)
经过多次尝试,这是一种像“魅力”般的解决方案:
第1步:我们将设置本地化和时区(上页)
// ====> Localizzazione
setlocale(LC_TIME, 'ita', 'it_IT'); // Italiano
date_default_timezone_set("Europe/Rome"); // Ora
第2步:我们创建了一个函数,可以在需要时轻松转换(无论在何处进入页面)
//=============== Funzione formattazione data
function f_date_time($f_date, $f_date_info) {
if (strlen($f_date) > 7){
$dateToParse = $f_date;
}else{
$dateToParse = date("YmdHis");
}
switch ($f_date_info) {
case 1: //20191130
echo date("Ymd");
break;
case 2: //30/11/19
echo utf8_encode(strftime('%d/%m/%y', strtotime($dateToParse)));
break;
case 3: //30/11/2019
echo utf8_encode(strftime('%d/%m/%Y', strtotime($dateToParse)));
break;
case 4: //30/11/2019 15:27:50
echo utf8_encode(strftime('%d/%m/%Y %H:%M:%S', strtotime($dateToParse)));
break;
case 5: //Saturday 30
echo utf8_encode(strftime('%A %d', strtotime($dateToParse)));
break;
case 6: //Saturday 30 November
echo utf8_encode(strftime('%A %d %B', strtotime($dateToParse)));
break;
case 7: //Saturday 30 November 2019
echo utf8_encode(strftime('%A %d %B %Y', strtotime($dateToParse)));
break;
case 8: //Saturday 30 November 2019 ore 15:27:50
echo utf8_encode(strftime('%A %d %B %Y %H:%M:%S', strtotime($dateToParse)));
break;
default: //20191130152750
echo date("YmdHis");;
}
}
第3步:现在要转换数据,只需使用该函数(无论将其插入代码中)
$today = "20190320234500"; //Format yyyymmddhhmmss
echo f_date_time($today, 1) . "\n";
echo f_date_time($today, 2) . "\n";
echo f_date_time($today, 3) . "\n";
echo f_date_time($today, 4) . "\n";
echo f_date_time($today, 5) . "\n";
echo f_date_time($today, 6) . "\n";
echo f_date_time($today, 7) . "\n";
echo f_date_time($today, 8) . "\n";
输出:会像这样:
20191231
20/03/74
20/03/1974
20/03/1974 23:45:00
mercoledì 20
mercoledì 20 marzo
mercoledì 20 marzo 1974
mercoledì 20 marzo 1974 23:45:00
PS:对我来说是愉快的小鸟:-)