Wie konvertiert man eine Datumszeichenfolge Mon, 24 May 2010 17:54:00 GMT
von RSS-Feed zu einem Zeitstempel in PHP?Convert RSS pubDate in einen Zeitstempel
Antwort
Sie können die integrierte Funktion strtotime()
verwenden. Es nimmt eine Datumszeichenfolge als erstes Argument und gibt einen Unix-Zeitstempel zurück.
Dieses Versuchen:
$pubDate = $item->pubDate;
$pubDate = strftime("%Y-%m-%d %H:%M:%S", strtotime($pubDate));
Ausgezeichnet! Funktioniert wie ein Charm – Borjante
strtotime
nicht mit verschiedenen Zeitzonen arbeiten.
Ich habe geschrieben diese Funktion RSS pubDates zu Zeitstempel zu konvertieren, die Rechnung trägt, in den verschiedenen Zeitzonen:
function rsstotime($rss_time) {
$day = substr($rss_time, 5, 2);
$month = substr($rss_time, 8, 3);
$month = date('m', strtotime("$month 1 2011"));
$year = substr($rss_time, 12, 4);
$hour = substr($rss_time, 17, 2);
$min = substr($rss_time, 20, 2);
$second = substr($rss_time, 23, 2);
$timezone = substr($rss_time, 26);
$timestamp = mktime($hour, $min, $second, $month, $day, $year);
date_default_timezone_set('UTC');
if(is_numeric($timezone)) {
$hours_mod = $mins_mod = 0;
$modifier = substr($timezone, 0, 1);
$hours_mod = (int) substr($timezone, 1, 2);
$mins_mod = (int) substr($timezone, 3, 2);
$hour_label = $hours_mod>1 ? 'hours' : 'hour';
$strtotimearg = $modifier.$hours_mod.' '.$hour_label;
if($mins_mod) {
$mins_label = $mins_mod>1 ? 'minutes' : 'minute';
$strtotimearg .= ' '.$mins_mod.' '.$mins_label;
}
$timestamp = strtotime($strtotimearg, $timestamp);
}
return $timestamp;
}
Dies funktionierte einwandfrei. Vielen Dank! –
Die rsstotime() Funktion richtig funktionierte nicht, wenn die pubDate in RSS-Feed Zeitzone andere hatten als +0000. Das Problem war mit dem $ Modifier, es musste umgekehrt werden. Um dies zu beheben, dass zwei Zeilen hinzugefügt werden mußten, so dass die Zeile:
$modifier = substr($timezone, 0, 1);
wurde:
$modifier = substr($timezone, 0, 1);
if($modifier == "+"){ $modifier = "-"; } else
if($modifier == "-"){ $modifier = "+"; }
einfach die Modifikation zu klären - zum Beispiel, wenn die pubDateMi ist, 22. Mai 2013 17.09.36 +0200 dann die Reihe
$timestamp = strtotime($strtotimearg, $timestamp
die Zeit um zwei Stunden offsetted es nicht zu resetted +0000 Zeitzone wie erwartet.
Die Mi, 22 Mai 2013 17:09:36 +0200 zeigt, dass die hier angegebene Zeit in der Zeitzone GMT +2 ist.
Der Code funktionierte nicht richtig und das hinzugefügt zusätzliche zwei Stunden Zeit, so dass die Zeit wurde Mi, 22. Mai 2013 19.09.36 0.000 statt Mi, 22. Mai 2013 15.09.36 +0000 wie es hätte sein sollen.
function pubdatetotime($pubDate) {
$months = 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');
$date = substr($pubDate, 5,11);
$year = substr($date, 7,4);
$month = substr($date, 3,3);
$d = substr($date, 0,2);
$time = substr($pubDate, 17,8);
return $year."-".$months[$month]."-".$d." ".$time;
}
Versuchen Sie, diese Funktion
Es ist wie strtotime seltsame Ergebnisse geben aussieht, wenn die Zeichenfolge, die die Zeitzone enthält. Zum Beispiel mit "Sat, 21 Sep 2010 00:00 GMT" bekomme ich 1285372800 (25-09-2010) –