Cómo convertir una cadena de fecha Mon, 24 May 2010 17:54:00 GMT
de una fuente RSS en una marca de tiempo en PHP?Convertir RSS pubDate a una marca de tiempo
Respuesta
Puede usar la función incorporada strtotime()
. Toma una cadena de fecha como primer argumento y devuelve una marca de tiempo de Unix.
intenta esto:
$pubDate = $item->pubDate;
$pubDate = strftime("%Y-%m-%d %H:%M:%S", strtotime($pubDate));
¡Excelente! Funciona como un amuleto – Borjante
strtotime
no funciona con diferentes zonas horarias.
que acabo de escribir esta función para convertir pubDates RSS a las 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;
}
Esto funcionó perfectamente. ¡Gracias! –
La función rsstotime() no funcionaba correctamente si el pubDate en rss feed tuvo zona horaria otra que +0000. El problema era con el modificador $, tenía que ser revertido. Para corregir esto dos líneas tenían que ser añadido, por lo que la línea:
$modifier = substr($timezone, 0, 1);
se convirtió en:
$modifier = substr($timezone, 0, 1);
if($modifier == "+"){ $modifier = "-"; } else
if($modifier == "-"){ $modifier = "+"; }
sólo para aclarar la modificación - por ejemplo si el pubDate era Miér 22 May 2013 17:09:36 +0200 continuación, la fila
$timestamp = strtotime($strtotimearg, $timestamp
offsetted el tiempo por dos horas no reseteado a +0000 zona horaria como se esperaba.
El Mié, 22 de mayo de 2013 17:09:36 +0200 muestra que la hora aquí presentada se encuentra en la zona horaria GMT +2.
El código no funcionaba correctamente y ha añadido extra de dos horas a la vez, por lo que el tiempo se convirtió en Miér 22 May 2013 19:09:36 +0000, en lugar Miér 22 May 2013 15:09:36 +0000 como 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;
}
Pruebe esta función
- 1. Formato RSS pubDate como .NET DateTime
- 2. Convirtiendo MySQL datetime a RSS pubDate usando PHP?
- 3. Cómo convertir una marca de tiempo de Unix en una marca de tiempo ISO8601 en PHP?
- 4. convertir rss a JSON
- 5. ¿Cuál es el formato correcto para pubdate de feed RSS?
- 6. Parse RSS objeto pubDate to Date en java
- 7. Convertir marca de tiempo en zonas horarias
- 8. Convertir la marca de tiempo de unix a julian
- 9. Cómo convertir la marca de tiempo de DB2 a datetime?
- 10. cómo convertir la cadena de marca de tiempo a java.util.Date
- 11. Cómo convertir la marca de tiempo java a php timestamp?
- 12. Convertir marca de tiempo a fecha y hora en erlang
- 13. Convertir marca de tiempo Unix a la norma ISO 8601
- 14. convertir la fecha a la marca de tiempo en javascript?
- 15. Java: convertir un tiempo a partir de hoy en una marca de tiempo
- 16. Agregando días a una marca de tiempo
- 17. Lote: Marca de tiempo a UNIX Tiempo
- 18. Python pytz Convertir una marca de tiempo (formato de cadena) de una zona horaria a otra
- 19. Convirtiendo la marca de tiempo local a la marca de tiempo UTC en Java
- 20. Objective-C: ayúdame a convertir una marca de tiempo en una fecha/hora formateada
- 21. jQuery Hace tiempo de una marca de tiempo?
- 22. ¿Cómo convertir el tiempo de MySQL a la marca de tiempo UNIX usando PHP?
- 23. Convertir marca de tiempo en fecha/hora legible PHP
- 24. Cómo convertir una marca de tiempo de época fraccional (doble) a std :: chrono :: time_point?
- 25. ¿Cómo puedo convertir una marca de tiempo de Unix a DateTime y viceversa?
- 26. Cómo convertir una marca de tiempo UTC a fecha y hora del sistema en ABAP
- 27. ¿Convertir marca de tiempo hasta la fecha en Android?
- 28. ¿Cómo puedo convertir una marca de tiempo ISO8601 en tiempo Unix en Perl?
- 29. Linux marca de tiempo a PHP
- 30. Convertir una marca de tiempo Unix de una fecha legible por humanos en PHP?
Parece que strtotime dar resultados extraños cuando la cadena contiene la zona horaria. Por ejemplo, con "sáb, 21 sep 2010 00:00 GMT" obtengo 1285372800 (25-09-2010) –