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

Discussione in 'PHP' iniziata da Max61, 15 Maggio 2018.

  1. Max61

    Max61 Utente Attivo

    Registrato:
    2 Marzo 2014
    Messaggi:
    482
    Mi Piace Ricevuti:
    2
    Punteggio:
    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
     
  2. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.218
    Mi Piace Ricevuti:
    109
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    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->$interval->60 $interval->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
     
  3. Max61

    Max61 Utente Attivo

    Registrato:
    2 Marzo 2014
    Messaggi:
    482
    Mi Piace Ricevuti:
    2
    Punteggio:
    18
    Grazie Marino, sembra funzioni...;)
    Max61
     
  4. Max61

    Max61 Utente Attivo

    Registrato:
    2 Marzo 2014
    Messaggi:
    482
    Mi Piace Ricevuti:
    2
    Punteggio:
    18
    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->$interval->60 $interval->3600;
    calcolo corretto:
    PHP:
    $tot_orefestive_calcolo $interval->$interval->100 $interval->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
     
  5. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.218
    Mi Piace Ricevuti:
    109
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    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
     
  6. Max61

    Max61 Utente Attivo

    Registrato:
    2 Marzo 2014
    Messaggi:
    482
    Mi Piace Ricevuti:
    2
    Punteggio:
    18
    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
     
  7. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.218
    Mi Piace Ricevuti:
    109
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    1 + 30 / 60 = 1,50
     
  8. Max61

    Max61 Utente Attivo

    Registrato:
    2 Marzo 2014
    Messaggi:
    482
    Mi Piace Ricevuti:
    2
    Punteggio:
    18
    Esatto;)
     
Sto caricando...

Condividi questa Pagina