4

我有一个函数可以在第一行的文件中读出日期。这个日期的格式是这样的荷兰语2 mei 201328 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;
}
4

2 回答 2

2

在不创建您自己的日期解析器的情况下,原生 PHP 函数仅使用英文日期。

但是,有一个可用于 PHP 的国际日期格式化程序扩展。您可以安装此插件,然后就可以解析非英语日期。

http://www.php.net/manual/en/intldateformatter.parse.php

于 2013-08-08T17:41:52.580 回答
1

正如 其他人 发现的那样strtotime不尊重设置的语言环境。实际上,手册中的描述是:“将任何英文文本日期时间描述解析为 Unix 时间戳”

解决方案

  • 您可以使用strptime()PHP5 以来确实尊重语言环境(如strftime),但有一些关于在 php 网站上使用它的警告。

  • 您可以编写一个函数,将荷兰语月份名称替换为英语月份名称,然后调用strtotime.

于 2013-08-08T17:41:38.343 回答