RSS Datumsformat in MySQL Datetime umwandeln

WordPress stellt zu jeder Kategorie einen RSS 2.0 Feed zur Verfügung. Man muss dazu nur die Permalink-URL gefolgt von einem /feed/ eingeben.

Beispiel: https://www.bennyn.de/downloads/
RSS-Feed: https://www.bennyn.de/downloads/feed/
Alternativ: https://www.bennyn.de/downloads/?feed=rss2

Das Datum des jeweiligen Feed-Eintrags wird nach RFC822 Spezifikation angegeben (Beispiel: Sun, 06 Sep 2009 16:10:34 +0000). In der Programmiersprache PHP habe ich eine Funktion geschrieben, die dieses Format in ein MySQL-kompatibles DATETIME umwandelt.

Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
function rss_to_sql_datetime($rss_datetime)
{	
	$string		= $rss_datetime;
	$day		= substr($string, 5,2);
	$month		= substr($string, 8,3);
	$year		= substr($string,12,4);
	$time		= substr($string,17,8);
 
	$week_map	= array(
	 'Jan' => '01'
	,'Feb' => '02'
	,'Mar' => '03'
	,'Apr' => '04'
	,'May' => '05'
	,'Jun' => '06'
	,'Jul' => '07'
	,'Aug' => '08'
	,'Sep' => '09'
	,'Oct' => '10'
	,'Nov' => '11'
	,'Dec' => '12'
	);
 
	$datetime = $year.'-'.$week_map[$month].'-'.$day.' '.$time;
	return $datetime;
}	
	$rss_datetime = 'Sun, 01 May 2011 21:30:45 +0000';
	$sql_datetime = rss_to_sql_datetime($rss_datetime);
	echo $sql_datetime; // 2011-05-01 21:30:45
?>

Wie Björn in den Kommentaren bemerkt hat, nimmt meine Funktion keine Rücksicht auf die Zeitzone des jeweiligen Eintrags. Um das zu erreichen, könnte man die ab PHP5 verfügbare DateTime-Klasse verwenden:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
	date_default_timezone_set('Europe/Berlin');	
 
	$rss_datetime = 'Sun, 01 May 2011 21:30:45 +0200';
	$dateTime = new DateTime($rss_datetime);
	$timeZone = $dateTime->getTimezone();
 
	echo 'DateTimeZone::getName(): '.$timeZone->getName();
	echo 'DateTime::getTimestamp(): '.$dateTime->getTimestamp();
	echo 'DateTime::format(): '.$dateTime->format('d.m.Y H:i:S');
	echo 'date(): '.date('d.m.Y H:i:s',$dateTime->getTimestamp());
?>

4 Gedanken zu „RSS Datumsformat in MySQL Datetime umwandeln“

  1. noch n Nachtrag, warum überhaupt ne eigene Funktion? Geht auch mit PHP-Boardmitteln zB. für PHP5:

    einfach mal die default_timezone umschalten, dann siehst du bei der Ausgabe von date() warum die Timezone so wichtig ist.

    getTimezone();

    echo ‚DateTimeZone::getName(): ‚.$timeZone->getName();
    echo ‚DateTime::getTimestamp(): ‚.$dateTime->getTimestamp();
    echo ‚DateTime::format(): ‚.$dateTime->format(‚d.m.Y H:i:s‘);
    echo ‚date(): ‚.date(‚d.m.Y H:i:s‘,$dateTime->getTimestamp());

    ?>

  2. ups da fehlte die hälfte

    getTimezone();

    echo ‚DateTimeZone::getName(): ‚.$timeZone->getName();
    echo ‚DateTime::getTimestamp(): ‚.$dateTime->getTimestamp();
    echo ‚DateTime::format(): ‚.$dateTime->format(‚d.m.Y H:i:s‘);
    echo ‚date(): ‚.date(‚d.m.Y H:i:s‘,$dateTime->getTimestamp());

    ?>

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.