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設定されたロケールを尊重しません。実際、マニュアルの説明には次のように記載されています

ソリューション

  • ロケールを尊重するstrptime()PHP5 以降( など)を使用できますstrftime、php Web サイトでの使用にはいくつかの警告があります。

  • オランダ語の月名を英語の月名に置き換えて を呼び出す関数を作成できますstrtotime

于 2013-08-08T17:41:38.343 に答える