Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    64

    Sottrarre del tempo a a una somma di orari

    Salve a tutti, ho una pagina dove effettuo la somma delle ore lavorate da un utente e la somma delle ore di pausa effettuate.

    Ora vorrei togliere dalla somma delle ore lavorate la somma delle ore di pausa effettuate.

    Ho inserito dei record nel database dove le ore lavorate sono 45:20:20 e le ore di pausa sono 01:35:20

    Quindi dovrei ottenere un totale di ore lavorate (detratte le ore di pausa) 43:25:20.

    Invece non riesco a fare questo calcolo. Potete aiutarmi?.

    //CONTEGGIO ORE LAVORATE E ORE DI PAUSA NEL MESE
    $r=mysqli_query($conn,"SELECT SUM(HOUR(orelavorate)) AS hm, SUM(MINUTE(orelavorate)) as mm, SUM(SECOND(orelavorate)) AS sm,
    SUM(HOUR(pausatot)) AS phm, SUM(MINUTE(pausatot)) as pmm, SUM(SECOND(pausatot)) AS psm FROM calendario WHERE user_id='$utente' AND months='$mese' AND year='$anno'");

    $riga=mysqli_fetch_assoc($r);

    if($riga['hm']<=9)
    {
    $totore = '0'.$riga['hm'];
    }
    else
    {
    $totore = $riga['hm'];
    }
    if($riga['mm']<=9)
    {
    $totminuti = '0'.$riga['mm'];
    }
    else if($riga['mm']>59)
    {
    //$totpminuti = $totpminuti - 60;
    $totore +=1;
    }
    else
    {
    $totminuti = $riga['mm'];
    }
    if($riga['sm']<=9)
    {
    $totsecondi = '0'.$riga['sm'];
    }
    else if($riga['sm']>59)
    {
    //$totpminuti = $totpminuti - 60;
    $totminuti +=1;
    }
    else
    {
    $totsecondi = $riga['sm'];
    }

    if($riga['phm']<=9)
    {
    $totpore = '0'.$riga['phm'];
    }
    else
    {
    $totpore = $riga['phm'];
    }
    if($riga['pmm']<=9)
    {
    $totpminuti = '0'.$riga['pmm'];
    }
    else if($riga['pmm']>59)
    {
    //$totpminuti = $totpminuti - 60;
    $totpore +=1;
    }
    else
    {
    $totpminuti = $riga['pmm'];
    }
    if($riga['psm']<=9)
    {
    $totpsecondi = '0'.$riga['psm'];
    }
    else if($riga['psm']>59)
    {
    //$totpminuti = $totpminuti - 60;
    $totpminuti +=1;
    }
    else
    {
    $totpsecondi = $riga['psm'];
    }

    $sommameseoreL= $totore.':'.$totminuti.':'.$totsecondi; //---->45:20:20
    $sommamesePause = $totpore.':'.$totpminuti.':'.$totpsecondi; //---->01:35:20

    Qui mi fermo perche ho provato varie soluzioni per sottrarre il totale della pausa dal totale delle ore ma non riesco.

    Qualcuno puo aiutarmi? Vi ringrazio.

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,471
    Trasforma entrambi i tempi in secondi, fai la sottrazione e riporti il risultato nel formato HH:MM:SS

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    64
    Ciao Alhazred, e grazie prima di tutto.

    Ho provato a fare cosi per convertire le due somme in secondi:

    $timeOl = $sommameseoreL;
    $parsedOl = date_parse($timeOl);
    $secondioremese = $parsedOl['hour'] * 3600 + $parsedOl['minute'] * 60 + $parsedOl['second'];

    $timeOp = $sommamesePause;
    $parsedOp = date_parse($timeOp);
    $secondiorepausa = $parsedOp['hour'] * 3600 + $parsedOp['minute'] * 60 + $parsedOp['second'];

    $calcoloOreEffettive = $secondioremese - $secondiorepausa;

    Con calcoloOreEffettive ottengo i secondi che mi rimangono dalla sottrazione.

    Quando riconverto:

    $calcoloOreEffettive = $secondioremese - $secondiorepausa;

    $init = $calcoloOreEffettive;
    $oremese = gmdate('H:i:s', $init);

    Ottengo solo 04:12:07 che non sono le ore effettive di lavoro che in verita dovrebbero essere 43:25:20

    Potresti dirmi come riconvertirli in ore in formato H:i:s perfavore?
    Ultima modifica di LNP; 08-10-2022 a 17:11 Motivo: Correzione testo

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,471
    Prima di tutto assicurati che $secondioremese e $secondiorepausa contengano il valore che ti aspetti, non darlo per scontato, fa una stampa per vedere cosa contengono.
    Se non hanno il valore corretto, verifica, sempre con una stampa, i dati che recuperi dal database.

    E' sempre fondamentale verificare che i dati iniziali siano corretti quando si hanno risultati diversi da ciò che ci si aspetta.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    64
    Alhazred, ho verificato i risultati che ottengo dalla conversione da ore a secondi e sono errati, nonostante il formato ore lavorate
    45:20:20 ottenuto dalla somma delle "ore lavorate ogni giorno" x "i giorni lavorati" sia corretto.

    $secondioremese = 20527 ->errato
    $secondiorepausa = 5400 ->errato

    Cosa sbaglio nel codice precedente nella conversione da ore in formato HH:MM:SS a secondi?

    $sommameseoreL= $totore.':'.$totminuti.':'.$totsecondi; //---->45:20:20
    $sommamesePause = $totpore.':'.$totpminuti.':'.$totpsecondi; //---->01:35:20

    $timeOl = $sommameseoreL;
    $parsedOl = date_parse($timeOl);
    $secondioremese = $parsedOl['hour'] * 3600 + $parsedOl['minute'] * 60 + $parsedOl['second'];

    $timeOp = $sommamesePause;
    $parsedOp = date_parse($timeOp);
    $secondiorepausa = $parsedOp['hour'] * 3600 + $parsedOp['minute'] * 60 + $parsedOp['second'];

    $calcoloOreEffettive = $secondioremese - $secondiorepausa;

    Potresti darmi una dritta?


  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,471
    Come ti ho detto, essendo errati questi dati, procedi a controllare quelli che prendi dal database, stampa il risultato della query e vedi che cosa hai recuperato.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    64
    Il problema sta nella conversione da "somma ore minuti secondi" a secondi. I dati che prendo dal database sono corretti.
    Ma la conversione no e non capisco perche

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    64
    Risolto l' errore della conversione .........ora tutto funziona!!!
    Grazie comunque

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.