php rss timestamp pubdate

php - Convierte RSS pubDate en una marca de tiempo



timestamp (5)

Cómo convertir una cadena de fecha Mon, 24 May 2010 17:54:00 GMT desde el feed RSS a una marca de tiempo en PHP?


strtotime no funciona con diferentes zonas horarias.

Acabo de escribir esta función para convertir RSS pubDates a marcas de tiempo que tiene en cuenta las diferentes zonas horarias:

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; }



Prueba esto:

$pubDate = $item->pubDate; $pubDate = strftime("%Y-%m-%d %H:%M:%S", strtotime($pubDate));


La función rsstotime () no funcionaba correctamente si el feed pubDate en rss tenía una zona horaria distinta de +0000 . El problema era con el modificador $, tenía que ser revertido. Para arreglar esas dos líneas tenía que ser agregada, entonces la línea:

$modifier = substr($timezone, 0, 1);

convirtió:

$modifier = substr($timezone, 0, 1); if($modifier == "+"){ $modifier = "-"; } else if($modifier == "-"){ $modifier = "+"; }

Solo para aclarar la modificación, por ejemplo, si el pubDate fue Wed, 22 de mayo de 2013 17:09:36 +0200, entonces la fila

$timestamp = strtotime($strtotimearg, $timestamp

se ha compensado el tiempo por dos horas y no se ha restablecido a la zona horaria +0000 como se esperaba.

The Wed, 22 de mayo de 2013 17:09:36 +0200 muestra que el tiempo presentado aquí está en la zona horaria GMT +2.

El código no funcionó correctamente y agregó dos horas adicionales al tiempo, por lo que llegó la hora Mié, 22 de mayo de 2013 19:09:36 +0000 , en cambio Mié, 22 de mayo de 2013 15:09:36 +0000, ya que debería haber sido .


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; }

Prueba esta función