PHP解析德国日期

时间:2016-12-16 12:52:04

标签: php date

我对下面的代码有疑问。如何格式化德国日期,例如“Di,02.Okt 2012”到“2012-10-02”?

我已经检查了许多网站的解决方案,但没有找到可以帮助我的东西。

    $value ='Di, 02.Okt 2012';
    $tempdate = $value;
    $tempdate = substr($tempdate,-11);
    $tempdate = date('Y-m-d',$tempdate);

输出:1970-01-01

解决:

$value = 'comes from a foreach loop'; 

$tempdate = $value;
    $tempdate = substr($tempdate,-11);
    $tempdate = str_replace('.Jan ', '-01-', $tempdate);
    $tempdate = str_replace('.Feb ', '-02-', $tempdate);
    $tempdate = str_replace('.Mär ', '-03-', $tempdate);
    $tempdate = str_replace('.Apr ', '-04-', $tempdate);
    $tempdate = str_replace('.Mai ', '-05-', $tempdate);
    $tempdate = str_replace('.Jun ', '-06-', $tempdate);
    $tempdate = str_replace('.Jul ', '-07-', $tempdate);
    $tempdate = str_replace('.Aug ', '-08-', $tempdate);
    $tempdate = str_replace('.Sep ', '-09-', $tempdate);
    $tempdate = str_replace('.Okt ', '-10-', $tempdate);
    $tempdate = str_replace('.Nov ', '-11-', $tempdate);
    $tempdate = str_replace('.Dez ', '-12-', $tempdate);
    $tempdate = date('Y-m-d',strtotime($tempdate));

    echo $tempdate.'<br/>';

这是许多日期的解决方案。 ^^我希望我可以帮助它

3 个答案:

答案 0 :(得分:4)

将包含德国日期和月份$date_string变量传递给使用strtr (string translate)以及德国日(和月)数组的函数将允许{{ 3}}正确解析:

  

strtotime (string to unix timestamp)

由于any English textual datetime description仅解析英语,因此在没有strtotime (string to unix timestamp)的情况下需要手动干预来翻译这些字符串。

function germanStrtotime($date_string) {
  $germanDays = array('montag'=>'monday', 'mo'=>'monday', 'dienstag'=>'tuesday', 'di'=>'tuesday', 'mittwoch'=>'wednesday', 'mi'=>'wednesday', 'donnerstag'=>'thursday', 'do'=>'thursday', 'freitag'=>'friday', 'fr'=>'friday', 'samstag'=>'saturday', 'sa'=>'saturday', 'sonntag'=>'sunday', 'so'=>'sunday');
  $germanMonths = array('jnuar'=>'january', 'jan'=>'january', 'jän'=>'january', 'februar'=>'february', 'feb'=>'february', 'marz'=>'march', 'märz'=>'march', 'mai'=>'may', 'juni'=>'june', 'oktober'=>'october', 'okt'=>'october', 'sept'=>'september', 'dezember'=>'december', 'dez'=>'december');
  $str = strtr(strtolower($date_string), $germanMonths);
  $str = strtr(strtolower($str), $germanDays);
  return strtotime($str);
}

$value ='Di, 02.Okt 2012';
$tempdate = $value;
$tempdate = germanStrtotime($tempdate);
$tempdate = date('Y-m-d', $tempdate);

die('Output: '.$tempdate); // 2012-10-02

答案 1 :(得分:0)

对于国际化任务,我强烈建议您使用PHP intl扩展名。它包含几个用于常见国际化任务的类,例如日期/时间格式,数字格式,字符串音译等。具体来说,IntlDateFormatter类可以格式化(和解析)任何可用语言环境的日期时间。

答案 2 :(得分:0)

这适用于你的例子。
当你有另一个约会时,替换&#34; Okt&#34;与另一个月和&#34; -10 - &#34;与月份的数量。

GId