我有一个函数可以在第一行的文件中读出日期。此日期的格式为荷兰语,如2 mei 2013
或28 jun. 2013
它需要将日期字符串转换为时间戳,但无论我尝试什么它都不适用于mei
飞蛾或任何其他荷兰月份。这是我目前的代码(原始函数是更多的代码,但这是它出错的地方)
function getTimestamp($date){
date_default_timezone_set('Europe/Amsterdam');
setlocale(LC_ALL, 'nl_NL');
$timestamp = strtotime($date);
return $timestamp;
}
现在,使用此功能时会出现一些结果:
$timestamp = getTimestamp('28 jun. 2013') //1372370400
$timestamp2 = getTimestamp('2 mei 2013') // false
但是,当我把这段代码放在函数
中时echo strftime('%e %b %Y', 1367445600)."\n";
打印'2 mei 2013'
我怎样才能告诉php不仅用荷兰语格式化日期时间字符串,还用荷兰语读取它?
=======================
感谢下面的一些解释,我现在让代码正常工作(这是完整的功能)
public function getReportDate(){
$mothsTranslated = array('mrt'=> 'mar','mei'=>'may', 'okt'=>'oct');
$content = file($this->file);
$line = $content[0];
$header = str_getcsv($line, $this->delimiter);
$date = str_replace('.', '', $header[1]);
foreach ($mothsTranslated as $dutch => $eng) {
if(strpos($date, $dutch) !== false){
$date = str_replace($dutch, $eng, $date);
}
}
$timestamp = strtotime($date);
return $timestamp;
}
答案 0 :(得分:2)
如果不创建自己的日期解析器,本机PHP函数只使用英语日期。
但是,有一个适用于PHP的国际dateformatter扩展。您可以安装此插件,然后就可以解析非英语日期。
答案 1 :(得分:1)
As others found out,strtotime
不尊重设置的区域设置。
实际上,它在manual状态中的描述:“将任何英语文本日期时间描述解析为Unix时间戳”
<强>解决方案强>
您可以使用strptime()
,因为PHP5 尊重语言环境(如strftime
),但有一些关于在php网站上使用它的警告。
您可以编写一个函数,将荷兰月份名称替换为英文月份名称,然后调用strtotime
。