我有一个由数据库(oracle)以如下格式返回的日期01-MAY-11:并将月份从英语转换为法语(MAY转换为Mai),我这样做了:
$date=str_replace("JAN","Janvier",$date);
$date=str_replace("FEB","Février",$date);
$date=str_replace("MAR","Mars",$date);
$date=str_replace("APR","Avril",$date);
$date=str_replace("MAY","Mai",$date);
$date=str_replace("JUN","Juin",$date);
$date=str_replace("JUL","Juillet",$date);
$date=str_replace("AUG","Août",$date);
$date=str_replace("SEPT","Septembre",$date);
$date=str_replace("OCT","Octobre",$date);
$date=str_replace("NOV","Novembre",$date);
$date=str_replace("DEC","Décembre",$date);
但是我觉得它很难看,所以有没有更简洁的方法来做到这一点。
谢谢
使用
<?php
setlocale(LC_TIME, 'fr_FR');
echo strftime("%d %b %Y", strtotime($date)); //use your dates timestamp
?>
我将使用数组来存储月份的翻译:
$mc = array("jan"=>"Janvier","feb"=>"Février", ....); //(and so on)
$new_date = explode('-',$date);
$new_date[1] = $mc[strtolower($new_date[1])];
$new_date = implode('-',$new_date);
当然,你需要检查它的日期,并确保月份总是第二个
您必须使用setlocale设置本地设置以获取所需语言的日期月份和日期
这里有一个基本的例子:
// here's a current list of locales you can find on systems for french
$locales = array('fr_FR.utf8','fr_FR.UTF8','fr_FR.utf-8','fr_FR.UTF-8','fr_FR','fr');
setlocale(LC_TIME,$locales);
//now you can call your localized date function
如果您不想更改应用程序其余部分的区域设置,您可以跟踪当前设置的区域设置,并在调用日期后恢复它,如下所示:
// keep track of locals setting:
$loc = setlocale(LC_TIME,0);
$tmpLoc = setlocale(LC_TIME,$locales);
//your date call here and then restore locale setting
setlocale(LC_TIME,$loc);
虽然语言环境解决方案是最好的,但也可以通过TO_CHAR
和NLS_DATE_LANGUAGE
选项直接从Oracle输出:
SELECT TO_CHAR(sysdate, 'DD-MONTH-YYYY', 'NLS_DATE_LANGUAGE=French') FROM DUAL;
OO Style:
<?php
class FrDate extends DateTime
{
public function month($format)
{
$english = array('Jan','Febr','Mar','Apr','May','Jun','Jul','Aug','Sept','Oct','Nov','Dec');
$french = array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre');
return str_replace($english, $french, parent::format($format));
}
}
$date = new FrDate('26 Dec 2011');
echo $date->month('M'); //Output: Décembre
?>
一旦你建立了一个查找数组,涉及两种语言,只需使用strtr()
应用string tr翻译。
代码(演示):
$enToFr = [
"JAN" => "Janvier",
"FEB" => "Février",
"MAR" => "Mars",
"APR" => "Avril",
"MAY" => "Mai",
"JUN" => "Juin",
"JUL" => "Juillet",
"AUG" => "Août",
"SEPT" => "Septembre",
"OCT" => "Octobre",
"NOV" => "Novembre",
"DEC" => "Décembre"
];
$date = '01-MAY-11';
echo strtr($date, $enToFr);
// 01-Mai-11
如果你知道你需要在项目的多个地方使用它,你可以将它声明为一个常量(因为它在逻辑上不会改变),以享受全局作用域/访问。
因为它是一个单一的本机函数,所以我不建议使用不同的函数名来制作包装器/helper函数来执行相同的过程。