Foros del Web » Programando para Internet » PHP »

Calcular precio entre dos rangos

Estas en el tema de Calcular precio entre dos rangos en el foro de PHP en Foros del Web. Hola, tengo unas dudas para calcular el precio por días,horas y minutos. Tengo un precio que es variable y que esta por hora, por ejemplo ...
  #1 (permalink)  
Antiguo 07/10/2014, 19:45
 
Fecha de Ingreso: septiembre-2011
Mensajes: 176
Antigüedad: 12 años, 7 meses
Puntos: 0
Calcular precio entre dos rangos

Hola, tengo unas dudas para calcular el precio por días,horas y minutos. Tengo un precio que es variable y que esta por hora, por ejemplo $precio = 20 por hora. Tendría que calcular el precio por el rango de dias.

2013-04-15 12:00:00
2013-05-31 12:00:00

$fecha1 = new DateTime("2010-07-28 01:15:52");
$fecha2 = new DateTime("2012-11-30 02:33:45");
$fecha = $fecha1->diff($fecha2);
printf('%d años, %d meses, %d días, %d horas, %d minutos', $fecha->y, $fecha->m, $fecha->d, $fecha->h, $fecha->i);
En este caso imprime: 2 años, 4 meses, 2 días, 1 horas, 17 minutos

Así obtendría los los dias horas y minutos.


El caso es que ahora quiero hacer el calculo por el precio, mi primera idea es hacerlo por separado y luego sumarlo.
$precio = 20;


############Primero los días:#######################
$precio_por_dia = $precio * 24; // 20€ * 24 = 480€
$precio_total_dias = $precio_por_dia * $fecha->d; // 480€ * 2 = 960€

############Segundo las horas:#####################

$precio_por_total_horas = $precio * $fecha->h; // 20€ * 1 = 20€

############Tercero los minutos:#####################

$precio_por_minuto = $precio / 60 ; 0,33 €

$precio_total_minuto = $precio_por_minuto * $fecha->i ; 0,33€ * 17 = 5,66€


$total = $precio_total_dias + $precio_por_total_horas + $precio_total_minuto ;// 960 + 20 + 5,66€ = 985,66 ;

Mi duda es esto estaria bien así o me estoy errollando, alguna idea seria de mucha ayuda gracias.


Un saludo muchas gracias

Última edición por luisalberti; 08/10/2014 a las 01:03
  #2 (permalink)  
Antiguo 08/10/2014, 01:35
 
Fecha de Ingreso: septiembre-2014
Mensajes: 180
Antigüedad: 9 años, 7 meses
Puntos: 14
Respuesta: Calcular precio entre dos rangos

Mmmh, y si utilizas segundos como unidad para todo? Por ejemplo, tienes que el precio son 20€/hora, que equivale a 20€/3600 segundos (los segundos que tiene una hora) y te da que cada segundo son 0.0056€ (redondeado a 4 decimales).

Usando tu ejemplo (no tengo una versión de PHP muy alta y no puedo usar la clase de fechas completa :( ):

- Lo primero, consigues los días, horas y minutos y pasas las 3 cosas a segundos:

2 días = 2 * 24 * 3600 = 172800
1 hora = 1 * 3600 = 3600
17 minutos = 17 * 60 = 1020

$totalSegundos = 172800 + 3600 + 1020 = 177420

$precio = 177420 * 0.0056 = 993,552€

No sé si me he dejado algo, el precio que me da es algo superior al tuyo seguramente por los decimales usados en tus cálculos y en los míos, pero bueno, quizá puedas coger alguna idea. Lo que se me ocurre es eso, pasarlo todo a segundos y trabajar con eso.

Un saludo!
__________________
Unelink.es - VPS, servidores dedicados, hosting y dominios. 10 años a tu lado.
  #3 (permalink)  
Antiguo 08/10/2014, 06:26
 
Fecha de Ingreso: septiembre-2011
Mensajes: 176
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Calcular precio entre dos rangos

Hola JSon, gracias por tu respuesta, como vez yo calculo precio por separado y luego lo sumo. Hay una diferencia de ocho euros y solo tengo decimales. Alguna idea



Cita:
Iniciado por json Ver Mensaje
Mmmh, y si utilizas segundos como unidad para todo? Por ejemplo, tienes que el precio son 20€/hora, que equivale a 20€/3600 segundos (los segundos que tiene una hora) y te da que cada segundo son 0.0056€ (redondeado a 4 decimales).

Usando tu ejemplo (no tengo una versión de PHP muy alta y no puedo usar la clase de fechas completa :( ):

- Lo primero, consigues los días, horas y minutos y pasas las 3 cosas a segundos:

2 días = 2 * 24 * 3600 = 172800
1 hora = 1 * 3600 = 3600
17 minutos = 17 * 60 = 1020

$totalSegundos = 172800 + 3600 + 1020 = 177420

$precio = 177420 * 0.0056 = 993,552€

No sé si me he dejado algo, el precio que me da es algo superior al tuyo seguramente por los decimales usados en tus cálculos y en los míos, pero bueno, quizá puedas coger alguna idea. Lo que se me ocurre es eso, pasarlo todo a segundos y trabajar con eso.

Un saludo!
  #4 (permalink)  
Antiguo 08/10/2014, 07:23
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 10 meses
Puntos: 181
Respuesta: Calcular precio entre dos rangos

Bueno, este mas que un ejercicio de php es un problema matemático. json creo que te ha dado la mejor solución. Si vas a realizar un calculo de cualquier tipo debes usar la unidad mas idonea para hacerlo (en este caso segundos)

Para poner un ejemplo practico los años bisiestos nacen de la diferencia de dar una vuelta al sol en un año. Como en cada años sobran unas horas, minutos y segundos cada cuatro años deciden unirlos en un solo día para apañar el desfase.

Si tu usas dias, horas y minutos estan omitiendo los segundos que no calculas y por ende al correr el tiempo esos segundos que no tuviste en cuenta son los que te hacen tener 8 pavos de diferencia que para una compañia pueden generar enorme perdidas.

Espero que la explicación haya sido clara.

Igual yo propongo que en lugar de sacar dias, horas y minutos saques la diferencia total en segundos.

Cita:
En este caso imprime: 2 años, 4 meses, 2 días, 1 horas, 17 minutos
¿Y cuantos segundos existen de diferencia? Estas dejando por fuera una diferencia que pueden ser 15 segundos, 20 segundos, 0 segundos. Eso que no tomas en cuenta puede hacer que varie tu precio

Revisate estas ideas y nos cuentas que diferencias encuentras en el calculo, asi de paso aprendemos todos

http://soyautodidacta.com/2013/04/ca...echas-con-php/

http://redesweb593.blogspot.com/2013...echas-PHP.html

http://www.blogdephp.com/como-calcul...php-strtotime/
__________________
Blog de humor http://elcuasatar.net63.net/

Última edición por cuasatar; 08/10/2014 a las 07:36
  #5 (permalink)  
Antiguo 08/10/2014, 07:49
 
Fecha de Ingreso: septiembre-2011
Mensajes: 176
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Calcular precio entre dos rangos

Hola Cuasatar, muchas gracias esa era la duda.
  #6 (permalink)  
Antiguo 08/10/2014, 09:21
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 10 meses
Puntos: 181
Respuesta: Calcular precio entre dos rangos

Cita:
Iniciado por luisalberti Ver Mensaje
Hola Cuasatar, muchas gracias esa era la duda.
Pues no dejo de picarme la duda de mirar la diferencia y lo realice de estas dos formas:

Código PHP:
$fechaInicial "2012-07-28 01:15:52";
$fechaFinal "2012-07-30 02:33:45";
$segundos strtotime($fechaFinal) - strtotime($fechaInicial);
print 
$segundos;
 
$precioSegundo=20/3600;
 echo 
'<br/>';
 print 
$precioSegundo;
 
$precioTotal=$segundos*$precioSegundo;
 echo 
'<br/>';
 print 
$precioTotal;
  echo 
'<br/>';
$fecha1 = new DateTime("2012-07-28 01:15:52");
$fecha2 = new DateTime("2012-07-30 02:33:45");
$fecha $fecha1->diff($fecha2);
printf('%d a&ntilde;os, %d meses, %d d&iacute;as, %d horas, %d minutos, %d segundos'$fecha->y$fecha->m$fecha->d$fecha->h$fecha->i,$fecha->);
$dia=24*3600*$fecha->d;
$hora=3600*$fecha->h;
$minutos=60*$fecha->i;
$segundos=$fecha->s;
$totalsegundos=$dia+$hora+$minutos+$segundos;
 echo 
'<br/>';
 print 
$totalsegundos;
  
$precioTotal2=$totalsegundos*$precioSegundo;
  echo 
'<br/>';
  print 
$precioTotal2
y los resultados en pantalla son los siguientes:

Cita:
177473
0.0055555555555556
985.96111111111
0 años, 0 meses, 2 días, 1 horas, 17 minutos, 53 segundos
177473
985.96111111111
Como en tu ejemplo inicial tenias diferencia de años y meses me tome la molestia de solo dejarlo en días, horas, minutos y segundos pero en el sentido estricto de la palabra tambien necesitas los años y meses para realizar el calculo, cosa que no vi que realizaras en tus datos, por eso considero que todo se puede calcular directamente en segundos y así evitarse crear formulas para meses y años.

La diferencia en el precio como se puede observar radica en el redondeo que se hace de las cifras, entre mas redondeado el valor saldra diferente tal y como se observa en el ejemplo.

Cualquier otro punto de vista es bienvenido
__________________
Blog de humor http://elcuasatar.net63.net/
  #7 (permalink)  
Antiguo 09/10/2014, 14:18
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Calcular precio entre dos rangos

Como nota al margen los dias totales ya te los proporciona el Interval.
Código PHP:
Ver original
  1. $fecha1 = new DateTime("2010-07-28 01:15:52");
  2. $fecha2 = new DateTime("2012-11-30 02:33:45");
  3. $fecha = $fecha1->diff($fecha2);
  4. echo $fecha->format('%a');
http://php.net/manual/en/dateinterval.format.php

Por otro lado, también puedes usar Carbon:https://github.com/briannesbitt/Carbon#api-difference y dormir tranquilo al final del día.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: calcular, precio, rangos
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 06:42.