Foros del Web » Programando para Internet » PHP »

Dias entre rango de fechas

Estas en el tema de Dias entre rango de fechas en el foro de PHP en Foros del Web. HOla Necesito ayuda, tengo que muestre cuantos dias hay entre un rango de fechas, ahora necesito que muestre cada dia que hay entre ese rango ...
  #1 (permalink)  
Antiguo 29/01/2014, 07:12
Avatar de JeMaGa  
Fecha de Ingreso: julio-2011
Ubicación: Bogota
Mensajes: 430
Antigüedad: 12 años, 9 meses
Puntos: 4
Dias entre rango de fechas

HOla

Necesito ayuda, tengo que muestre cuantos dias hay entre un rango de fechas, ahora necesito que muestre cada dia que hay entre ese rango de fechas ayuda

esto es lo que tengo

Código PHP:
Ver original
  1. $fechaini='2014-01-13';
  2. $fechafin='2014-01-22';
  3.  
  4.         $ano = substr($fechaini, -10, 4);
  5.         $mes = substr($fechaini, -5, 2);
  6.         $dia = substr($fechaini, -2, 2);
  7.  
  8.         $ano1 = substr($fechafin, -10, 4);
  9.         $mes1 = substr($fechafin, -5, 2);
  10.         $dia1 = substr($fechafin, -2, 2);
  11.  
  12.         //calculo timestam de las dos fechas
  13.         $timestamp1 = mktime(0,0,0,$mes,$dia,$ano);
  14.         $timestamp2 = mktime(4,12,0,$mes1,$dia1,$ano1);
  15.        
  16.         //resto a una fecha la otra
  17.         $segundos_diferencia =  $timestamp2 - $timestamp1;
  18.  
  19.         //convierto segundos en días
  20.         $dias_diferencia = $segundos_diferencia / (60 * 60 * 24);
  21.  
  22.         //quito los decimales a los días de diferencia
  23.         $dias_diferencia = floor($dias_diferencia)+1;
  24.  
  25.         echo $dias_diferencia;
  26.    
  27.         for ($i=0; $i<$dias_diferencia; $i++){
  28.             echo
  29.         }


La idea es que en el for muestre cada dia, pero no se como, gracias por toda la ayuda que me puedan brindar
  #2 (permalink)  
Antiguo 29/01/2014, 09:09
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Dias entre rango de fechas

En el bucle, puedes mostrar el día de la fecha inicial, conviertes la fecha en segundos y le adicionas la cantidad de segundos que hay en un día, todo esto mientras la fecha sea menor o igual que la fecha límite.

Código PHP:
Ver original
  1. $f1 = "2014-01-25";
  2. $f2 = "2014-02-10";
  3.  
  4. while ($f1 <= $f2){
  5.     echo substr($f1, 8) . "\n";
  6.     $f1 = date("Y-m-d", strtotime($f1) + 86400);
  7. }

El resultado de esto es el siguiente:

Código HTML:
Ver original
  1. 25
  2. 26
  3. 27
  4. 28
  5. 29
  6. 30
  7. 31
  8. 01
  9. 02
  10. 03
  11. 04
  12. 05
  13. 06
  14. 07
  15. 08
  16. 09
  17. 10

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 29/01/2014, 09:40
Avatar de JeMaGa  
Fecha de Ingreso: julio-2011
Ubicación: Bogota
Mensajes: 430
Antigüedad: 12 años, 9 meses
Puntos: 4
Respuesta: Dias entre rango de fechas

Creo que no me hice entender, necesito que me muestre las fechas que hay dentro del rango de fechas 2014-01-13 al 2014-01-22

Ejemplo que me muestre

2014-01-13
2014-01-14
2014-01-15
2014-01-16
2014-01-17
2014-01-18
2014-01-19
2014-01-20
2014-01-21
2014-01-22

Gracias
  #4 (permalink)  
Antiguo 29/01/2014, 10:28
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Dias entre rango de fechas

Hombre, ahí mismo está la solución, ya no muestres solamente el día sino la fecha entera.

Código PHP:
Ver original
  1. $f1 = "2014-01-25";
  2. $f2 = "2014-02-10";
  3.  
  4. while ($f1 <= $f2){
  5.     echo $f1 . "\n";
  6.     $f1 = date("Y-m-d", strtotime($f1) + 86400);
  7. }

Resultado:

Código HTML:
Ver original
  1. 2014-01-25
  2. 2014-01-26
  3. 2014-01-27
  4. 2014-01-28
  5. 2014-01-29
  6. 2014-01-30
  7. 2014-01-31
  8. 2014-02-01
  9. 2014-02-02
  10. 2014-02-03
  11. 2014-02-04
  12. 2014-02-05
  13. 2014-02-06
  14. 2014-02-07
  15. 2014-02-08
  16. 2014-02-09
  17. 2014-02-10

No copies y pegues el código, analízalo, saludos.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 29/01/2014, 11:22
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Dias entre rango de fechas

Puedes resolver tu problema de forma muy sencilla usando la clase DateTime de Php: http://www.php.net/manual/en/book.datetime.php
Te dejo un ejemplo usando una función que te devuelve el rango de fechas como un arreglo:
Código PHP:
Ver original
  1. function createRangeFromDates($start, $end, $format='Y-m-d') {
  2.     $endDate = new DateTime($end);
  3.     $endDate->add(new DateInterval('P1D'));
  4.  
  5.     $period = new DatePeriod(
  6.          new DateTime($start),
  7.          new DateInterval('P1D'),
  8.          $endDate
  9.     );
  10.  
  11.     foreach($period as $date) {
  12.         $array[] = $date->format($format);
  13.     }
  14.  
  15.     return $array;
  16. }
  17.  
  18. $rangeDates = createRangeFromDates('2014-01-13','2014-01-22');
Prueba el código por que escribí la función al vuelo y es probable que contenga errores.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #6 (permalink)  
Antiguo 29/01/2014, 13:01
Avatar de JeMaGa  
Fecha de Ingreso: julio-2011
Ubicación: Bogota
Mensajes: 430
Antigüedad: 12 años, 9 meses
Puntos: 4
Respuesta: Dias entre rango de fechas

Gracias por la ayuda, pero necesito que el for muestre las veces necesarias que indique $dias_diferencia las fechas

Ejemplo
tengo la fecha 2014-01-13 a 2014-01-22
hay 9 dias de diferencia entonces necesito que el for recorra los dias que estan en este rango!! para eso el for!!

gracias


Gracias por toda la ayuda queme puedan dar
  #7 (permalink)  
Antiguo 29/01/2014, 14:04
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: Dias entre rango de fechas

Si, si ya sabemos que necesitas, pero como lo has tratado de hacer? no esperes que otros hagan el trabajo por ti, publica el código y deja de holgazanear esperando una respuesta perfecta...

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #8 (permalink)  
Antiguo 29/01/2014, 15:45
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Dias entre rango de fechas

JeMaGa, ¿has intentado reemplazar las fechas que puse como ejemplo por las que tienes en el algoritmo que propuse?. Insisto, no te limites a copiar y pegar el código, analízalo, porque si te vas a pasar la vida en este plan de esperar a que otros de ten las respuestas servidas, vas a ser un programador mediocre y desempleado. Te lo digo en buena onda para que te des cuenta del error en el que estás cayendo y aprendas, como todos lo hemos hecho en algún momento de nuestras vidas.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #9 (permalink)  
Antiguo 29/01/2014, 19:48
Avatar de JeMaGa  
Fecha de Ingreso: julio-2011
Ubicación: Bogota
Mensajes: 430
Antigüedad: 12 años, 9 meses
Puntos: 4
Respuesta: Dias entre rango de fechas

jonni09lo con el que empece el tema es el codigo que tengo, no se como hacer lo que necesito por eso lo publique y no estoy olgazaniando
  #10 (permalink)  
Antiguo 29/01/2014, 19:53
Avatar de JeMaGa  
Fecha de Ingreso: julio-2011
Ubicación: Bogota
Mensajes: 430
Antigüedad: 12 años, 9 meses
Puntos: 4
Respuesta: Dias entre rango de fechas

Alexis88 si reemplace las fecha y me muestra pero necesito que tome encuenta la variable ($dias_diferencia) que me esta tomando el valor de la cantidad de dias ... gracias por los consejos
  #11 (permalink)  
Antiguo 29/01/2014, 20:06
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Dias entre rango de fechas

La diferencia la puedes obtener convirtiendo ambas fechas a segundos con la función strtotime, restándolas y dividiendo dicha diferencia entre la cantidad de segundos que hay en un día que son 86400.

Código PHP:
Ver original
  1. $f1 = "2014-01-13";
  2. $f2 = "2014-01-22";
  3.  
  4. echo "Diferencia: " . (strtotime($f2) - strtotime($f1)) / 86400 . " días<br />";
  5. echo "Fechas (de inicio a fin):<br />";
  6.  
  7. while ($f1 <= $f2){
  8.     echo $f1 . "<br />";
  9.     $f1 = date("Y-m-d", strtotime($f1) + 86400);
  10. }

Resultado:

Código HTML:
Ver original
  1. Diferencia: 9 días
  2. Fechas (de inicio a fin):
  3. 2014-01-13
  4. 2014-01-14
  5. 2014-01-15
  6. 2014-01-16
  7. 2014-01-17
  8. 2014-01-18
  9. 2014-01-19
  10. 2014-01-20
  11. 2014-01-21
  12. 2014-01-22

Como consejo final: Nunca esperes a que otros hagan lo que tú debes hacer, que es intentar resolver tus problemas, acá te podemos ayudar con dudas que tengas, pero no vamos a estar haciendo todo el trabajo por ti, pues así nunca aprenderás y te quedarás en lo mismo. Cuando alguien te ayude brindándote un algoritmo, no debes de limitarte a copiarlo y pegarlo para comprobar que funcione como esperes, debes analizarlo, estudiarlo y adaptarlo a tus necesidades, es por eso que te decía que pruebes cambiando las fechas cuando pedías que se muestren las que querías.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #12 (permalink)  
Antiguo 29/01/2014, 20:51
Avatar de JeMaGa  
Fecha de Ingreso: julio-2011
Ubicación: Bogota
Mensajes: 430
Antigüedad: 12 años, 9 meses
Puntos: 4
Respuesta: Dias entre rango de fechas

Alexis88 gracias lo tomare en cuenta, y una preguunta porque se pone 86400?
  #13 (permalink)  
Antiguo 29/01/2014, 21:08
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Dias entre rango de fechas

Si lees detenidamente lo que escribí, notarás que dije que en un día hay 86400 segundo, entonces, si obtengo la diferencia de días en segundos, para convertir dicha cantidad en días, la divido entre la cantidad de segundos que hay en un día. Aplica la regla de tres simple (matemáticas).

Cita:
777600 segundos = X días
86400 segundos = 1 día
X = 777600 / 86400
X = 9 días
Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #14 (permalink)  
Antiguo 30/01/2014, 10:43
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Dias entre rango de fechas

Cita:
Iniciado por JeMaGa Ver Mensaje
Creo que no me hice entender, necesito que me muestre las fechas que hay dentro del rango de fechas 2014-01-13 al 2014-01-22

Ejemplo que me muestre

2014-01-13
2014-01-14
2014-01-15
2014-01-16
2014-01-17
2014-01-18
2014-01-19
2014-01-20
2014-01-21
2014-01-22

Gracias
Partiendo del ejemplo que te proporcione, solo tienes que hacer lo siguiente:
Código PHP:
Ver original
  1. $rangeDates = createRangeFromDates('2013-02-25','2013-03-12');
  2.  
  3. echo count($rangeDates).' dias <br/>';
  4.  
  5. foreach($rangeDates as $date){
  6.     echo $date .'<br/>';
  7. }
Resultado:
Cita:
10 dias
2014-01-13
2014-01-14
2014-01-15
2014-01-16
2014-01-17
2014-01-18
2014-01-19
2014-01-20
2014-01-21
2014-01-22
En realidad para tu caso particular, solo tenias que jugar un poco con los ejemplos que se te pasaron y si no entiendes algo consulta la documentación oficial.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: dias, fecha, rango
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 15:55.