Foros del Web » Programando para Internet » PHP »

ayuda con un código de fechas.

Estas en el tema de ayuda con un código de fechas. en el foro de PHP en Foros del Web. Buenas, para aprender creo que tengo que entender el código que utilizo, y este código que estoy utilizando no termino de entenderlo, si alguien fuese ...
  #1 (permalink)  
Antiguo 22/06/2007, 04:05
 
Fecha de Ingreso: agosto-2006
Mensajes: 219
Antigüedad: 17 años, 8 meses
Puntos: 0
ayuda con un código de fechas.

Buenas, para aprender creo que tengo que entender el código que utilizo, y este código que estoy utilizando no termino de entenderlo, si alguien fuese tan amable se lo agradecería mucho.

Código PHP:
<?php
function suma_fechas($fecha,$ndias)
            

{
            

      if (
preg_match("/[0-9]{1,2}\/[0-9]{1,2}\/([0-9][0-9]){1,2}/",$fecha))
            

              list(
$dia,$mes,$año)=split("/"$fecha);
            

      if (
preg_match("/[0-9]{1,2}-[0-9]{1,2}-([0-9][0-9]){1,2}/",$fecha))
            

              list(
$dia,$mes,$año)=split("-",$fecha);
        
$nueva mktime(0,0,0$mes,$dia,$año) + $ndias 24 60 60;
        
$nuevafecha=date("d-m-Y",$nueva);
            

      return (
$nuevafecha);  
            

}
echo 
'<head>
            

              <title>'
.$_SERVER[PHP_SELF].'</title>
            

      </head>
            

      <html>
            

      <body>'
;
$f1="30/01/1993";
            

$f2="30-01-1992";
$f11=suma_fechas($f125);
            

      echo 
"$f1 más 25 es  $f11<br>";
$f11=suma_fechas($f1, -40);
            

      echo 
"$f1 menos 40 es  $f11<br>";
$f21=suma_fechas($f2365);
            

      echo 
"$f2 más 365 es  $f21<br>";
$f21=suma_fechas($f2, -365);
            

      echo 
"$f2 menos 365 es  $f21<br>";
            

echo 
"<a href=$_SERVER[PHP_SELF]>Recargar la Página</a>";
echo 
'</body>
            

      </html>'
;
?>

Si alguien sería tan amable de explicarmelo estaría muy agradecido, y además podríamos dejar o crear un how works de código al igual que tenemos un faq.

Un saludo

oskar
  #2 (permalink)  
Antiguo 22/06/2007, 04:13
Avatar de RUX
RUX
 
Fecha de Ingreso: enero-2004
Ubicación: Las Palmas de Gran Canari
Mensajes: 566
Antigüedad: 20 años, 2 meses
Puntos: 0
Re: ayuda con un código de fechas.

Hola!!

Por lo que veo a la función 'suma_fechas()', le das una fecha válida 'dia-mes-año', y los días que quieres que cuente hacia adelante (valor positivo) o hacia atrás (valor negativo) para que te devuelva la fecha resultada.
¿o quieres que explique cada paso de la función en sí?

SALUDOS
Ruymán Trujillo
__________________
Rux.es - Sitio Personal | IslaRock.com - Todo Rock
  #3 (permalink)  
Antiguo 22/06/2007, 04:25
 
Fecha de Ingreso: mayo-2005
Mensajes: 217
Antigüedad: 18 años, 10 meses
Puntos: 5
Re: ayuda con un código de fechas.

que es lo que no entiendes la expesiones regulares?????'
"/[0-9]{1,2}\/[0-9]{1,2}\/([0-9][0-9]){1,2}/"
  #4 (permalink)  
Antiguo 23/06/2007, 01:15
 
Fecha de Ingreso: agosto-2006
Mensajes: 219
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: ayuda con un código de fechas.

Por favor corregidme.

if (preg_match("/[0-9]{1,2}\/[0-9]{1,2}\/([0-9][0-9]){1,2}/",$fecha))

entiendo que la expresión regular es para verificar que se han introducido únicamente campos numéricos y que estan en el rango correspondiente de día mes y año


list($dia,$mes,$año)=split("/", $fecha);

esta linea entiendo que saca los datos como un array y separa el día mes y año por /

esta linea es la que se me resiste:
$nueva = mktime(0,0,0, $mes,$dia,$año) + $ndias * 24 * 60 * 60;
$nuevafecha=date("d-m-Y",$nueva);

entiendo que los días que se quieren añadir se convierten a segundos, pero el

mktime (0,0,0, $mes,$dia,$año)

no lo termino de entender y tampoco

$nuevafecha=date("d-m-Y",$nueva);


Un saludo y muchas gracias

oskar
  #5 (permalink)  
Antiguo 23/06/2007, 03:41
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Re: ayuda con un código de fechas.

Hola oskar.

Cita:
Iniciado por oskar_calvo Ver Mensaje
Por favor corregidme.

if (preg_match("/[0-9]{1,2}\/[0-9]{1,2}\/([0-9][0-9]){1,2}/",$fecha))

entiendo que la expresión regular es para verificar que se han introducido únicamente campos numéricos y que estan en el rango correspondiente de día mes y año
La expresión regular que usas, no comprueba el rango de fechas, solo comprueba que el formato sea algo así: X/X/X o XX/X/XX o X/X/XX etc...


Cita:
esta linea es la que se me resiste:
$nueva = mktime(0,0,0, $mes,$dia,$año) + $ndias * 24 * 60 * 60;
$nuevafecha=date("d-m-Y",$nueva);

entiendo que los días que se quieren añadir se convierten a segundos, pero el

mktime (0,0,0, $mes,$dia,$año)
Si, $ndias se pasan a segundos, y el mktime() se hace para pasar al formato UNIX la fecha. Es decir, pasarlos a segundos transcurridos desde el 01/01/70.

Cita:
no lo termino de entender y tampoco

$nuevafecha=date("d-m-Y",$nueva);
Eso es para pasar el formato UNIX a fecha que entendamos todos.

Saludos.
  #6 (permalink)  
Antiguo 23/06/2007, 04:30
 
Fecha de Ingreso: agosto-2006
Mensajes: 219
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: ayuda con un código de fechas.

es decir que mktime lo que hace es coger todos los segundos y te suma el tiempo que transcurre añadiendo los días, meses y años, no?

un saludo y gracias

oskar
  #7 (permalink)  
Antiguo 23/06/2007, 13:46
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Re: ayuda con un código de fechas.

No, la función mktime() lo único que hace es pasar la fecha que le des, a los segundos que han pasado desde el 1 de enero de 1970 hasta la fecha que le hayas indicado.
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 21:57.