Foros del Web » Programando para Internet » PHP »

Seguir Sumando despues de pasar 1 mes a otro

Estas en el tema de Seguir Sumando despues de pasar 1 mes a otro en el foro de PHP en Foros del Web. Saludos y muchas gracias por leer y tomase el tiempo para leer mi duda. Les comento: Estoy desarrollando un modulo que retorna el costo de ...
  #1 (permalink)  
Antiguo 21/10/2012, 16:38
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años
Puntos: 25
Pregunta Seguir Sumando despues de pasar 1 mes a otro

Saludos y muchas gracias por leer y tomase el tiempo para leer mi duda.

Les comento:

Estoy desarrollando un modulo que retorna el costo de una habitacion segun su dia ya que este varia por temporada. El asunto es que la forma que tengo actualmente me hace tdo OK pero tiene un error. l cual es que cuenta de forma sucesiva y no hace el intervalo en cada mes. es decir ejemplo:

2012-10-29 // Este mes tiene 31 dias
2012-11-03 // Este mes tiene 30 dias.

La suma de precios seria desde el 29 hasta el 02 dando un total de 5 Noches.

Lo que tengo es lo siguiente:

Código PHP:
Ver original
  1. $fecha_desde = '2012-10-29'; // 2 = dia
  2. $fecha_hasta = '2012-11-03'; // 2 = dia
  3. $codigo_habitacion = '6K6W439MZ00';
  4.  
  5. $meses = array('31', '28', '31', '30', '31', '30', '31', '31', '30', '31', '30', '31'); // 11
  6.  
  7. $array_fd = explode('-', $fecha_desde);
  8. $dias_mes_fd = $meses[$array_fd[1] - 1];
  9.  
  10. $array_fa = explode('-', $fecha_hasta);
  11. $dias_mes_fa = $meses[$array_fd[1] - 1];
  12.  
  13. $total_dias = $tools->dateDiff($fecha_desde, $fecha_hasta) - 1;
  14.  
  15. $total = 0;
  16.  
  17. $dia_inicio = $array_fd[2]; //27
  18. $dia_fin = $array_fa[2] - 1; //29
  19.  
  20. while ($dia_inicio <= $dia_fin) {
  21.  
  22.     echo $array_fd[2] . ' == ' . $meses[$array_fd[1] - 1];
  23.  
  24.     if ($array_fd[2] == $meses[$array_fd[1] - 1]) {
  25.         $dia_fin = $dia_inicio - $total_dias;
  26.         echo $dia_fin;
  27.         $dia_inicio = 1;
  28.         echo $dia_inicio;
  29.     }
  30.  
  31.  
  32.  
  33.     /* echo $array_fd[0] . '-' . $array_fd[1] . '-' . $dia_inicio . '= ';
  34.       echo $herramientas->calcular_precio_habitacion_temporada($codigo_habitacion, $array_fd[0] . '-' . $array_fd[1] . '-' . $dia_inicio, $fecha_hasta) . '<BR>';
  35.  
  36.  
  37.       $total = $total + $herramientas->calcular_precio_habitacion_temporada($codigo_habitacion, $array_fd[0] . '-' . $array_fd[1] . '-' . $dia_inicio, $fecha_hasta);
  38.      */
  39.     echo $dia_inicio;
  40.  
  41.     $dia_inicio++;
  42. }
  43.  
  44. echo '<BR>Total Pagar: ' . $total;

El problema que tengo reside aqui:

Código PHP:
Ver original
  1. if ($array_fd[2] == $meses[$array_fd[1] - 1]) {
  2.         $dia_fin = $dia_inicio - $total_dias;
  3.         echo $dia_fin;
  4.         $dia_inicio = 1;
  5.         echo $dia_inicio;
  6.     }

Ya que no se bien la logica de cambiar el mes a 11 y seguir enimerando los dias que falten de ese mes lo cual serian 2 dias ya que del 29 al 31 solo hay 3 noches y quedando restante 2 noches desde el 1 hasta el 2 de Noviembre.

Alguien entiende lo que me refiero?

Otra cosa: Eso lo hago con la intension de pasarle ese valor de fecha a este metodo:
Código PHP:
Ver original
  1. $herramientas->calcular_precio_habitacion_temporada($codigo_habitacion,  $array_fd[0] . '-' . $array_fd[1] . '-' . $dia_inicio, $fecha_hasta);

Ya que el va a la base de datos y me busca el precio de la temporada para esa fecha especifica.

Muchas gracias por su ayuda.
__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.
  #2 (permalink)  
Antiguo 21/10/2012, 16:58
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Seguir Sumando despues de pasar 1 mes a otro

te presento la clase DateTime, si trabajas con PHP5.3 puedes usar el método diff, aunque en los ejemplos que hay en ese link hay ejemplos de como hacerlo con una versión menor (no lo he probado porque tengo 5.3 :)), saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 21/10/2012, 17:14
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años
Puntos: 25
Respuesta: Seguir Sumando despues de pasar 1 mes a otro

Cita:
Iniciado por carlos_belisario Ver Mensaje
te presento la clase DateTime, si trabajas con PHP5.3 puedes usar el método diff, aunque en los ejemplos que hay en ese link hay ejemplos de como hacerlo con una versión menor (no lo he probado porque tengo 5.3 :)), saludos
Gracias pero yo ya puedo obtener los dias entre dos fechas. mi problema no es ese. Creo que no leistes detenidamente mi inconveniente. pero igual gracias.
__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.
  #4 (permalink)  
Antiguo 21/10/2012, 19:43
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años
Puntos: 25
Respuesta: Seguir Sumando despues de pasar 1 mes a otro

Código PHP:
Ver original
  1. for ($i = 0; $i <= $total_dias; $i++) {
  2.  
  3.     if ($array_fd[2] + $i >= $dias_mes_fd+1) {
  4.      
  5.            echo $array_fa[0] . '-' . $array_fa[1] . '-' . (($array_fd[2] + $i)-$dias_mes_fd) . '<BR>';
  6.     }
  7.    
  8.     else {
  9.         echo $array_fd[0] . '-' . $array_fd[1] . '-' . ($array_fd[2] + $i) . '<BR>';
  10.     }
  11. }

esa es la solucion a ese problema y el resultado es:

2012-10-29
2012-10-30
2012-10-31
2012-11-01
2012-11-02
2012-11-03

Dando como fecha Inicio 29 de Octubre del 2012 al 4 de Noviembre del 2012 Dando un total de 6 Noches.

Pero ahora me encuentro con otro problema y es que si coloco 2013 $i se incrementa y no inicia para cada mes aqui el resultado.

alguien ????

2012-10-29
2012-10-30
2012-10-31
2012-12-01 // Esta OK ahora comienza a enumerar Noviembre
2012-12-02
2012-12-03
2012-12-04
2012-12-05
2012-12-06
2012-12-07
2012-12-08
2012-12-09
2012-12-10
2012-12-11
2012-12-12
2012-12-13
2012-12-14
2012-12-15
2012-12-16
2012-12-17
2012-12-18
2012-12-19
2012-12-20
2012-12-21
2012-12-22
2012-12-23
2012-12-24
2012-12-25
2012-12-26
2012-12-27
2012-12-28
2012-12-29
2012-12-30 // Esta Ok pero al continuar deberia iniciar en 1 hasta 31 de diciembre
2012-12-31
2012-12-32
2012-12-33
2012-12-34
2012-12-35
2012-12-36
2012-12-37
2012-12-38
2012-12-39
2012-12-40
2012-12-41
2012-12-42
2012-12-43
2012-12-44
2012-12-45
2012-12-46
2012-12-47
2012-12-48
2012-12-49
2012-12-50
2012-12-51
2012-12-52
2012-12-53
2012-12-54
2012-12-55
2012-12-56
2012-12-57
2012-12-58
2012-12-59
2012-12-60
__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.

Última edición por eddwinpaz; 21/10/2012 a las 19:57

Etiquetas: seguir, sumando
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:51.