Foros del Web » Programando para Internet » PHP »

Dias restantes para la fecha?

Estas en el tema de Dias restantes para la fecha? en el foro de PHP en Foros del Web. Tengo este codigo: Código PHP: <?php $fecha_actual = date ( "Y-m-d" ); $fecha_cumple = "$cumple" ; $fecha_actualArray = explode ( "-" , $fecha_actual ); $mes_actual ...
  #1 (permalink)  
Antiguo 14/03/2010, 05:23
 
Fecha de Ingreso: enero-2009
Ubicación: España
Mensajes: 785
Antigüedad: 11 años
Puntos: 9
Dias restantes para la fecha?

Tengo este codigo:

Código PHP:
<?php

$fecha_actual
=date("Y-m-d");
$fecha_cumple="$cumple";

$fecha_actualArray=explode("-",$fecha_actual);
$mes_actual=$fecha_actualArray[1];
$dia_actual=$fecha_actualArray[2];

$fecha_cumpleArray=explode("-",$fecha_cumple);
$mes_cumple=$fecha_cumpleArray[1];
$dia_cumple=$fecha_cumpleArray[2];
$calculo No se como hacerlo:S;
echo 
"$calculo";
?>
En fecha_actual recoje la fecha de hoy y en fecha_cumple el cumpleaños del usuario,

ahora lo que pretendo hacer con eso es restar el mes y dia de la fecha actual y mes y dia de hoy, para calcular los dias restantes hasta la fecha de su cumpleaños, pero no se como meter el calculo aquí :


$calculo = No se como hacerlo:S;


Ayuda, gracias por adelantado, dejo ++
  #2 (permalink)  
Antiguo 14/03/2010, 06:41
Avatar de Ryo
Ryo
 
Fecha de Ingreso: marzo-2008
Ubicación: Bilbao
Mensajes: 269
Antigüedad: 11 años, 11 meses
Puntos: 14
Respuesta: Dias restantes para la fecha?

Creo que lo más sencillo es que usaras las funciones mktime y date con el parámetro z, que te devuelve el día del año (entre 0 y 365).

Te doy una idea general: calcular el día del año (100, 254...) en el que cumple años el individuo (date("z", mkdir(0,0,0,$mes,$dia,$ano))). A esa fecha la restas el día del año en el que estamos (date("z")). Pueden ocurrir dos cosas: resultado positivo o negativo. Si es positivo, ya está, no hay que hacer nada más. Si es negativo, hay que sumarle los días de un año. Es decir, si mi cumpleaños fue ayer, el resultado que te dará será -1. A eso le sumas 365 días que tiene un año y te dirá que faltan 364 días. OJO: cuidado con los bisiestos en este último caso (el parámetro L de la función date te dice si un año es bisiesto o no).

Última edición por Ryo; 14/03/2010 a las 06:52
  #3 (permalink)  
Antiguo 14/03/2010, 07:09
 
Fecha de Ingreso: enero-2009
Ubicación: España
Mensajes: 785
Antigüedad: 11 años
Puntos: 9
Respuesta: Dias restantes para la fecha?

Y no hay otro modo mas facil? El otro modo que puse me parece mas facil..
  #4 (permalink)  
Antiguo 14/03/2010, 08:12
Avatar de Ryo
Ryo
 
Fecha de Ingreso: marzo-2008
Ubicación: Bilbao
Mensajes: 269
Antigüedad: 11 años, 11 meses
Puntos: 14
Respuesta: Dias restantes para la fecha?

No soy un experto en funciones de fechas, así que no sé si habrá alguna manera de operar directamente con ellas y dejarnos de líos, pero bueno, tampoco es tan complicado; sólo hay que tener un poquito de cuidado. No sé si me habré descuidado y habré hecho algo mal porque lo he hecho un poco con prisas, pero te dejo un ejemplo de cómo creo que podría hacerse. Podría hacerse con menos instrucciones, pero creo que así te quedará más claro lo que hago.
Código PHP:
Ver original
  1. list( $ano, $mes, $dia ) = explode( "-", $cumple );
  2.     $dia_cumple = date( "z", mkdir( 0, 0, 0, $mes, $dia, $ano ) );
  3.     $dia_actual = date( "z" );
  4.     $dias_restantes = $dia_cumple - $dia_actual;
  5.     if ( $dias_restantes < 0 ) {
  6.         $dias_restantes += 365;
  7.         if ( date( "L", mkdir( 0, 0, 0, 0, 0, $ano+1 ) ) ) {
  8.             if ( date( "m", mkdir( 0, 0, 0, $mes, $dia, $ano ) ) > 2 ) {
  9.                 $dias_restantes++;
  10.             }
  11.         }
  12.     }
  13.     echo $dias_restantes;
  #5 (permalink)  
Antiguo 14/03/2010, 08:40
 
Fecha de Ingreso: enero-2009
Ubicación: España
Mensajes: 785
Antigüedad: 11 años
Puntos: 9
Respuesta: Dias restantes para la fecha?

No sé si entendí bien:

Código PHP:
Ver original
  1. $cumple = "2010-03-07";
  2. list( $ano, $mes, $dia ) = explode( "-", $cumple );
  3.     $dia_cumple = date( "z", mkdir( 0, 0, 0, $mes, $dia, $ano ) );
  4.     $dia_actual = date( "z" );
  5.     $dias_restantes = $dia_cumple - $dia_actual;
  6.     if ( $dias_restantes < 0 ) {
  7.         $dias_restantes += 365;
  8.         if ( date( "L", mkdir( 0, 0, 0, 0, 0, $ano+1 ) ) ) {
  9.             if ( date( "m", mkdir( 0, 0, 0, $mes, $dia, $ano ) ) > 2 ) {
  10.                 $dias_restantes++;
  11.             }
  12.         }
  13.     }
  14.     echo $dias_restantes;

Pero me tira:

Cita:
Warning: mkdir() expects at most 4 parameters, 6 given in /home2/public_html/test.php on line 4
292

Mirando ejemplos he provado a hacer esto:

Código PHP:
Ver original
  1. <?
  2. //Fecha del Cumpleaños
  3. $fecha = "1980-03-07";
  4. list($anio, $mes, $dia) = explode("-",$fecha);
  5.  
  6. //Fecha de hoy
  7. $fecha2 = date("Y-m-d");
  8. list($anio2, $mes2, $dia2) = explode("-",$fecha2);
  9.  
  10. $timestamp1 = mktime(0,0,0,$mes,$dia);
  11. $timestamp2 = mktime(4,12,0,$mes2,$dia2);
  12.  
  13. //resto a una fecha la otra
  14. $segundos_diferencia =  $timestamp1 - $timestamp2;
  15. //echo $segundos_diferencia;
  16.  
  17. //convierto segundos en días
  18. $dias_diferencia = $segundos_diferencia / (60 * 60 * 24);
  19.  
  20. //obtengo el valor absoulto de los días (quito el posible signo negativo)
  21. $dias_diferencia = abs($dias_diferencia);
  22.  
  23. //quito los decimales a los días de diferencia
  24. $dias_diferencia = floor($dias_diferencia);
  25.  
  26. $diasquefaltan = 365 - $dias_diferencia;
  27. echo $diasquefaltan;
  28.  
  29. ?>


Así estaría bien?

Última edición por SeaPirates; 14/03/2010 a las 09:30
  #6 (permalink)  
Antiguo 14/03/2010, 11:13
Avatar de Ryo
Ryo
 
Fecha de Ingreso: marzo-2008
Ubicación: Bilbao
Mensajes: 269
Antigüedad: 11 años, 11 meses
Puntos: 14
Respuesta: Dias restantes para la fecha?

¡Anda, lo siento muchísimo! He puesto mkdir por costumbre en lugar de mktime, por eso te da el warning...

Lo que tú haces también creo que estaría bien, salvo porque no tienes en cuenta los años bisiestos. Prueba a hacer en mi ejemplo el cambio que te he dicho y haz alguna prueba, o toma de mi ejemplo cómo tratar los años bisiestos y aplícalo a lo que tú has hecho.
  #7 (permalink)  
Antiguo 14/03/2010, 13:33
 
Fecha de Ingreso: enero-2009
Ubicación: España
Mensajes: 785
Antigüedad: 11 años
Puntos: 9
Respuesta: Dias restantes para la fecha?

Como dices tu es mucho mas facil, porque solamente hay que poner la fecha y no separar los años meses etc como el otro script.

Código PHP:
Ver original
  1. <?
  2. $cumple = "2010-03-07";
  3. list( $ano, $mes, $dia ) = explode( "-", $cumple );
  4.     $dia_cumple = date( "z", mktime( 0, 0, 0, $mes, $dia, $ano ) );
  5.     $dia_actual = date( "z" );
  6.     $dias_restantes = $dia_cumple - $dia_actual;
  7.     if ( $dias_restantes < 0 ) {
  8.         $dias_restantes += 365;
  9.         if ( date( "L", mktime( 0, 0, 0, 0, 0, $ano+1 ) ) ) {
  10.             if ( date( "m", mktime( 0, 0, 0, $mes, $dia, $ano ) ) > 2 ) {
  11.                 $dias_restantes++;
  12.             }
  13.         }
  14.     }
  15.     echo $dias_restantes;
  16.  
  17. ?>

Etiquetas: dias, 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 09:09.