Foros del Web » Programando para Internet » PHP »

Seleccionar de xml la fecha más cercana a la fecha actual.

Estas en el tema de Seleccionar de xml la fecha más cercana a la fecha actual. en el foro de PHP en Foros del Web. Hola a todos, tengo la siguiente duda: Tengo un xml con un listado de eventos, cada evento tiene una fecha y un nombre como atributos, ...
  #1 (permalink)  
Antiguo 22/02/2010, 10:50
 
Fecha de Ingreso: diciembre-2002
Ubicación: Madrid
Mensajes: 378
Antigüedad: 17 años
Puntos: 11
Seleccionar de xml la fecha más cercana a la fecha actual - [solucionado].

Hola a todos, tengo la siguiente duda:

Tengo un xml con un listado de eventos, cada evento tiene una fecha y un nombre como atributos, similar a este:

Código:
<?xml version="1.0" encoding="utf-8"?>
<eventos>
    <evento fecha="2010-04-20 20:00:00" nombre="Exposición en Madrid" />
    <evento fecha="2010-01-14 14:15:00" nombre="Exposición en Valencia" />
    <evento fecha="2010-03-24 17:30:00" nombre="Exposición en Buenos Aires" />    
    <evento fecha="2010-02-23 20:00:00" nombre="Exposición en Barcelona" />
    <evento fecha="2010-06-28 21:00:00" nombre="Exposición en Quito" />    
    <evento fecha="2010-07-25 20:00:00" nombre="Exposición en Mexico D.F" />    
</eventos>
Lo que quiero es, mostrar el evento más próximo (sólo uno) a la fecha actual. Es decir, si estoy a 22 de Febrero, mostraría el evento "Exposición en Barcelona" con fecha 23 de Febrero (basándonos en el xml anterior).

Entiendo, que esto sería tan simple como recorrer el xml y mostrar la primera fecha mayor a la fecha actual.

El problema es que los registros de este xml no están ordenados por fechas.

¿Existe alguna forma de recorrer el xml y mostrar la fecha más cercana a la fecha actual del servidor?

Muchas gracias, un saludo.

Última edición por benz0; 23/02/2010 a las 11:02
  #2 (permalink)  
Antiguo 22/02/2010, 10:56
Avatar de hector2c  
Fecha de Ingreso: noviembre-2007
Ubicación: Perú - Tacna
Mensajes: 979
Antigüedad: 12 años, 1 mes
Puntos: 25
Respuesta: Seleccionar de xml la fecha más cercana a la fecha actual.

ese XML lo generas tu???
__________________
blog: hector2c.wordpress.com
email: [email protected]
  #3 (permalink)  
Antiguo 22/02/2010, 10:59
 
Fecha de Ingreso: diciembre-2002
Ubicación: Madrid
Mensajes: 378
Antigüedad: 17 años
Puntos: 11
Respuesta: Seleccionar de xml la fecha más cercana a la fecha actual.

Hola hector2c, no lo genero yo.
  #4 (permalink)  
Antiguo 22/02/2010, 11:02
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 10 años, 2 meses
Puntos: 65
Respuesta: Seleccionar de xml la fecha más cercana a la fecha actual.

Código PHP:
<?php
$dom 
= new DOMDocument();
$dom->load('ruta.xml');
$evento $dom->getElementsByTagName('evento');

$fecha = new DateTime();
$dia_actual $fecha->format('d');
$mes_actual $fecha->format('m');

# Supongo que el año no importara, sino agregalo

foreach($evento as $ev){

    
$fecha $ev->getAttribute('fecha');
    
$nombre $ev->getAttribute('nombre');
    
$fecha explode(' ',$fecha);
    list(
$anio,$mes,$dia) = explode('-',$fecha[0]);
    
    if(
$mes == $mes_actual){
        if(
$dia == $dia_actual){
            echo 
"El evento de hoy es: $nombre <br />";
        }else if((
$dia_actual+1) == $dia){
            echo 
"El evento de ma&ntilde;ana es: $nombre<br />";
        }else if(
/* bla bla bla */){}

    }

}
?>
__________________
HV Studio
Diseño y desarrollo web
  #5 (permalink)  
Antiguo 22/02/2010, 11:02
Avatar de hector2c  
Fecha de Ingreso: noviembre-2007
Ubicación: Perú - Tacna
Mensajes: 979
Antigüedad: 12 años, 1 mes
Puntos: 25
Respuesta: Seleccionar de xml la fecha más cercana a la fecha actual.

oki oki, entonces, lo que tienes que hacer es almacenar el XML en un array y luego ordena el array, mmm, aqui hay un tema similar al tuyo
__________________
blog: hector2c.wordpress.com
email: [email protected]
  #6 (permalink)  
Antiguo 22/02/2010, 11:07
 
Fecha de Ingreso: diciembre-2002
Ubicación: Madrid
Mensajes: 378
Antigüedad: 17 años
Puntos: 11
Respuesta: Seleccionar de xml la fecha más cercana a la fecha actual.

Gracias por el código jackson666, lo probaré, y gracias hector2c, miraré ese tema.
Un saludo.
  #7 (permalink)  
Antiguo 23/02/2010, 10:59
 
Fecha de Ingreso: diciembre-2002
Ubicación: Madrid
Mensajes: 378
Antigüedad: 17 años
Puntos: 11
Respuesta: Seleccionar de xml la fecha más cercana a la fecha actual.

Finalmente hice lo que me comento hector2c, crear una matriz con las fechas, ordenarla y luego comparar las fechas.

Aquí dejo el código por si a alguien le sirve o lo puede mejorar:

Código:
<?php 
/* declaramos el xml */
$dom = new DOMDocument(); 
$dom->load('test5.xml'); 

$root=$dom->getElementsByTagName('eventos')->item(0); 

/* obtenemos la fecha actual del servidor */
$t=time();
$nuevo = (date("Y-m-d H:m:s",$t));

$tagE = $dom->getElementsByTagName('evento'); 

/* llenamos una matriz con todas las fechas del xml */
$c=0;
foreach($tagE as $e)
{
 $matriz[] = $e->getAttribute('fecha');
 $c++;
}

/* Ordenamos la matriz de fechas creada  */
sort($matriz);

/* Buscamos la fecha más cercana a la actual */
$f=0;
for($a=0;$a<$c;$a++)
	{
	while($matriz[$a] > $nuevo && $f < 1)
		{
			$fclave = $matriz[$a];
			$f++;
		}
	}

/* Volvemos a recorrer el xml comparando la fecha obtenida anteriormente */
		foreach($tagE as $e)
			{ 
				if($e->getAttribute('fecha') == $fclave)
				{
				echo "evento: ".$e->getAttribute('nombre')."<br />"; 
				echo "fecha: ".$e->getAttribute('fecha')." - ";   
				$c++;
				}
			}
?>
Gracias.
  #8 (permalink)  
Antiguo 23/02/2010, 11:05
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 10 años, 2 meses
Puntos: 65
Respuesta: Seleccionar de xml la fecha más cercana a la fecha actual.

Si funciono, es valida!
pero no es mas corta la manera que yo te propuse?
__________________
HV Studio
Diseño y desarrollo web
  #9 (permalink)  
Antiguo 23/02/2010, 13:41
 
Fecha de Ingreso: diciembre-2002
Ubicación: Madrid
Mensajes: 378
Antigüedad: 17 años
Puntos: 11
Respuesta: Seleccionar de xml la fecha más cercana a la fecha actual.

Hola Jackson666.

Tu código si funciona, cuando un evento es hoy, mañana o un día "x" especificado.

Pero yo lo que quiero es que, por ejemplo si el próximo evento es dentro de 8 o 33 días (por decir una cifra), ya se muestre "El próximo evento es en ... "

Es posible que con tu código se pueda hacer pero no sé como.

Muchas gracias por tu interés.

Etiquetas: seleccionar, xml, fechas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:22.