Foros del Web » Programando para Internet » PHP »

cálculo de meses

Estas en el tema de cálculo de meses en el foro de PHP en Foros del Web. Hola estoy intentando que un código me calcule el precio de una habitación: - La habitación vale 65 euros - tengo la fecha de entrada ...
  #1 (permalink)  
Antiguo 29/02/2012, 08:34
 
Fecha de Ingreso: diciembre-2003
Mensajes: 474
Antigüedad: 20 años, 4 meses
Puntos: 5
cálculo de meses

Hola
estoy intentando que un código me calcule el precio de una habitación:
- La habitación vale 65 euros
- tengo la fecha de entrada y salida en número entero (Ej. 20120101 - 20120102)
- Resto la cifra de salida menos la entrada y me da el número de días
- Lo multiplico por 65 y listo.

Me funciona hasta que queremos estar más de un mes (del 1 de enero al 1 de feb 2012):
- 20120201 menos 20120101 = 100
- Por lo que si lo multiplicamos por 65 nos da 6500 euros, no 1950 euros

¿Cómo puedo agrupar las dos cifras en meses?
Gracias.
  #2 (permalink)  
Antiguo 29/02/2012, 08:43
 
Fecha de Ingreso: septiembre-2003
Mensajes: 337
Antigüedad: 20 años, 7 meses
Puntos: 4
Respuesta: cálculo de meses

Puedes probar con una función de cálculo de fechas. Algo así:

(Si tienes las fechas en el formato que comentas, deberás separar cada una en año, mes y día, puedes usar para ello substr)

Código PHP:
function calculaDiasConFechas($fecha1$fecha2){
  
//Fecha1 (fecha de entrada en la habitación)
  
$anio1 substr($fecha104);
  
$mes1 substr($fecha142);
  
$dia1   substr($fecha162);
  
  
//Fecha2 (fecha de salida de la habitación)
  
$anio2 substr($fecha204);
  
$mes2 substr($fecha242);
  
$dia2   substr($fecha262);
 
 
//Calculo timestamp de las dos fechas
  
$timestamp1 mktime(0,0,0,$mes1,$dia1,$anio1);  
  
$timestamp2 mktime(0,0,0,$mes2,$dia2,$anio2);

  
$diasDiferencia 0;

  for(
$timestamp1;$timestamp1<=$timestamp2;$timestamp1=strtotime('+1 day ' date('Y-m-d',$timestamp1))){
      
    if((
strcmp(date('D',$timestamp1),'Sun')!=0) && (strcmp(date('D',$timestamp1),'Sat')!=0))
       
$diasDiferencia++;

  }
  return 
$diasDiferencia;

  #3 (permalink)  
Antiguo 29/02/2012, 08:45
 
Fecha de Ingreso: diciembre-2003
Mensajes: 474
Antigüedad: 20 años, 4 meses
Puntos: 5
Respuesta: cálculo de meses

Gracias por tu rápida respuesta, como siempre.
Lo voy a probar ahora mismo.
  #4 (permalink)  
Antiguo 29/02/2012, 08:49
 
Fecha de Ingreso: septiembre-2003
Mensajes: 337
Antigüedad: 20 años, 7 meses
Puntos: 4
Respuesta: cálculo de meses

Me he equivocado en una cosa, y es la siguiente, dentro del "for" debes quitar el "if".

antes:

Código PHP:
for($timestamp1;$timestamp1<=$timestamp2;$timestamp1=strtotime('+1 day ' date('Y-m-d',$timestamp1))){ 
      if((
strcmp(date('D',$timestamp1),'Sun')!=0) && (strcmp(date('D',$timestamp1),'Sat')!=0))
            
$diasDiferencia++;
  } 
Ahora:

Código PHP:
for($timestamp1;$timestamp1<=$timestamp2;$timestamp1=strtotime('+1 day ' date('Y-m-d',$timestamp1))){

    
$diasDiferencia++;


La razón de mi equivocación es que tengo añadido un control de si hay que contar fines de semana o no, por lo tanto ese control sobraría.

Saludos.
  #5 (permalink)  
Antiguo 29/02/2012, 09:02
 
Fecha de Ingreso: diciembre-2003
Mensajes: 474
Antigüedad: 20 años, 4 meses
Puntos: 5
Respuesta: cálculo de meses

Cita:
Iniciado por kabe_jrr Ver Mensaje
Me he equivocado en una cosa, y es la siguiente, dentro del "for" debes quitar el "if".

antes:

Código PHP:
for($timestamp1;$timestamp1<=$timestamp2;$timestamp1=strtotime('+1 day ' date('Y-m-d',$timestamp1))){ 
      if((
strcmp(date('D',$timestamp1),'Sun')!=0) && (strcmp(date('D',$timestamp1),'Sat')!=0))
            
$diasDiferencia++;
  } 
Ahora:

Código PHP:
for($timestamp1;$timestamp1<=$timestamp2;$timestamp1=strtotime('+1 day ' date('Y-m-d',$timestamp1))){

    
$diasDiferencia++;


La razón de mi equivocación es que tengo añadido un control de si hay que contar fines de semana o no, por lo tanto ese control sobraría.

Saludos.
Hola de nuevo,
Estoy probando pero no me va (me aparece vacío, es como si no entrara en la función). Te pongo el código de nuevo por si hago algo mal:

Código:
//calculo timestam de las dos fechas 
function calculaDiasConFechas($fecha1, $fecha2){
//Fecha1 (fecha de entrada en la habitación)
  $anio1 = substr($fecha1, 0, 4);
  $mes1 = substr($fecha1, 4, 2);
  $dia1   = substr($fecha1, 6, 2);
  
  //Fecha2 (fecha de salida de la habitación)
  $anio2 = substr($fecha2, 0, 4);
  $mes2 = substr($fecha2, 4, 2);
  $dia2   = substr($fecha2, 6, 2);
 
 //Calculo timestamp de las dos fechas
  $timestamp1 = mktime(0,0,0,$mes1,$dia1,$anio1);  
  $timestamp2 = mktime(0,0,0,$mes2,$dia2,$anio2);

  $diasDiferencia = 0;

for($timestamp1;$timestamp1<=$timestamp2;$timestamp1=strtotime('+1 day ' . date('Y-m-d',$timestamp1))){

    $diasDiferencia++;

}  

return $diasDiferencia;
}
Sigo probando cosas. Gracias.

Última edición por jota2; 29/02/2012 a las 09:10
  #6 (permalink)  
Antiguo 29/02/2012, 09:11
 
Fecha de Ingreso: septiembre-2003
Mensajes: 337
Antigüedad: 20 años, 7 meses
Puntos: 4
Respuesta: cálculo de meses

¿Qué error te da?
  #7 (permalink)  
Antiguo 29/02/2012, 09:21
 
Fecha de Ingreso: diciembre-2003
Mensajes: 474
Antigüedad: 20 años, 4 meses
Puntos: 5
Respuesta: cálculo de meses

Cita:
Iniciado por kabe_jrr Ver Mensaje
¿Qué error te da?
No me aparece nada...
  #8 (permalink)  
Antiguo 29/02/2012, 09:26
 
Fecha de Ingreso: diciembre-2003
Mensajes: 474
Antigüedad: 20 años, 4 meses
Puntos: 5
Respuesta: cálculo de meses

Hola, me ha funcionado poniendo este código muy parecido a lo que tú sugerías:
Cita:
//defino fecha 1
$ano1 = $year_entrada;
$mes1 = $mes_entrada;
$dia1 = $dia_entrada;

//defino fecha 2
$ano2 = $year_salida;
$mes2 = $mes_salida;
$dia2 = $dia_salida;

//calculo timestam de las dos fechas
$timestamp1 = mktime(0,0,0,$mes1,$dia1,$ano1);
$timestamp2 = mktime(4,12,0,$mes2,$dia2,$ano2);

//resto a una fecha la otra
$segundos_diferencia = $timestamp1 - $timestamp2;
//echo $segundos_diferencia;

//convierto segundos en días
$dias_diferencia = $segundos_diferencia / (60 * 60 * 24);

//obtengo el valor absoulto de los días (quito el posible signo negativo)
$dias_diferencia = abs($dias_diferencia);

//quito los decimales a los días de diferencia
$dias_diferencia = floor($dias_diferencia);

echo "Dias de diferencia".$dias_diferencia;
Gracias de nuevo.
  #9 (permalink)  
Antiguo 29/02/2012, 09:30
 
Fecha de Ingreso: septiembre-2003
Mensajes: 337
Antigüedad: 20 años, 7 meses
Puntos: 4
Respuesta: cálculo de meses

Me alegro, pero me extraña que antes no te saliera nada. A mí me ha funcionado bien... de hecho he hecho una prueba y todo ok. En cualquier caso, ya te funciona, así que perfecto. Un saludo.

Etiquetas: meses
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 19:37.