[PHP] Calcoli con ore formato 00:00:00

  • Creatore Discussione Creatore Discussione Max61
  • Data di inizio Data di inizio

Max61

Utente Attivo
2 Mar 2014
760
4
18
Salve ho un problema con il calcolo delle ore, ovvero moltiplico il numero di ore dato dalla differenza tra l'uscita e l'ingresso per il costo orario
PHP:
$tot_oreferiali = date('H:i:s,time())', strtotime($oraout_feriale) - strtotime($orain_feriale) - 3600) . " ore feriali lavorate<br />\n";
quando il valore della somma delle ore è per esempio:
ora ingresso:16:20:00
ora uscita:18:00:00
ore lavorate: 01:40:00
costo ora: 12.55
il risultato della moltiplicazione dovrebbe essere 12.55*01:40:00 = 17.57, invece nel db viene inserito 12.55
questo è il codice di calcolo:
PHP:
$costototferiale = $tot_oreferiali * $costooraferiale;
se invece la somma delle ore lavorate è
ora ingresso:08:28:00
ora uscita:12:11:00
ore lavorate: 03:43:00
costo ora: 12.55
il risultato della moltiplicazione in questo caso è corretto, ma non capisco cosa cambia nei due risultati...
Nella speranza di essere stato chiaro, ringrazio chi saprà darmi una mano
Max61
 
ti suggerisco di fare il calcolo passo-passo per avere sicurezza del risultato
PHP:
$costoOrario = 12.55;

$oraIngresso = "16:20:00";
$oraUscita   = "18:00:00";

$in  = new DateTime($oraIngresso);
$out = new DateTime($oraUscita);

$interval = $out->diff($in);

$oreLavorate = $interval->h + $interval->i / 60 + $interval->s / 3600;

$costoTotale = $costoOrario * $oreLavorate;

echo $in->format("H:i:s")." ora ingresso<br />";
echo $out->format("H:i:s")." ora uscita<br />";
echo $oreLavorate." ore lavorate<br />";
echo $costoOrario." costo orario<br />";
echo $costoTotale." costo totale<br />";

risultato
upload_2018-5-15_21-4-46.png
 
Buongiorno Marino, ho fatto alcune prove confrontando gli importi con i calcoli fatti dalla contabilità (buste paga) e mi sono accorto che affinchè il calcolo sia corretto devo dividere per 100 e non per 60, come mai?
calcolo errato:
PHP:
$tot_orefestive_calcolo = $interval->h + $interval->i / 60 + $interval->s / 3600;
calcolo corretto:
PHP:
$tot_orefestive_calcolo = $interval->h + $interval->i / 100 + $interval->s / 3600;
Infatti se divido per 60 le ore calcolate dall'orario 08:00:00 - 16:23:00 è: 8.3833333333333;
mentre dividendo per 100 lo stesso orario è: 8.23
Ciao
Max61
 
primo esempio,

costo orario = 12.55

costo minuto = costo orario / 60 minuti = 0,20916666....

ha lavorato 1 h e 40 minuti = 100 minuti

costo minuto x 100 minuti = 20,916666....



secondo esempio 08:00:00 - 16:23:00

tempo lavorato 8 h e 23 minuti = 503 minuti

costo minuto x 503 minuti = 105,210833...



quindi ?
quale unità di misura é applicata al costo orario, euro / ora ( 60 minuti) o altro?



ps, 2 ore di lavoro, costo = 12,55 x 2 = 25,10
ovvero 0,20916666.... x 120 minuti = 25,10
 
Infatti, se le ore sono una cifra tonda come 1:00:00 ora, 2:00:00 ore ecc. il calcolo si equivale, sia in sessantesimi che in centesimi, invece quando è un orario tipo 1:40:00 è diverso e quello corretto rispetto alla busta paga è in centesimi.
Probabilmente le ore sono trasformate in decimale, per esempio 1:30:00 diventa 1,50...
Grazie per l'aiuto
Max61
 

Discussioni simili