Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Somma ore

  1. #1

    Somma ore

    Salve come da titolo esiste una funzione nativa per sommare le ore ?

    Come ad esempio (1h e 30 minuti )+(1h e 30 minuti) =3 h

    O scritto in codice

    codice:
    $ora1 = 01:30;
    $ora2 = 01:30;
    
    $somma_ore=$ora1+$ora2;   // Somma Ore deve risultare 3 h

  2. #2
    Devi fare un software per sommare le ore dei dipendenti?

  3. #3
    Potresti utilizzare le funzioni strtotime() e date().

    Codice PHP:
    $time="1:30";
    $timestrtotime($time);
    $time=strtotime('+1 hour'$time);
    $time date('H:i'$time); 
    CODENCODE \ Branding \ Design \ Marketing
    www.codencode.it

  4. #4

  5. #5
    Ciao, spero possa esserti utile, anni fa ho dovuto scrivere un software per la gestione delle timbrature dell'azienda in cui lavoravo,
    avevo fretta e ho scritto del codice banale ma funzionante.

    Quello che segue e' solo indicativo, (non conosco ancora le relative funzioni PHP)

    2 parametri : inizio e fine nel formato hh.mm - (sono certo che in PHO esistano delle funzioni
    format attinenti le ore)



    funzione che calcola i secondi che compongono il primo parametro
    es. 10:15 - 17:10

    stabilisco le ore e i minuti leggendo le posizioni del testo
    le prime 2 rappresentano le ore le ultime due i minuti.

    TOT = (17*3600)+(10*60) - ((10*3660) + (15*60))

    poi HH=int(TOT/3600) MM=(tot-(HH*3600)/60)

    ovviamente se l'orario comprende il turo di notte devi fare dei controlli in piu',
    ad esempio che l'orario finale sia inferiore a quello iniziale e gestire la cosa.

    Con due linee di codice in piu' controlli anche i secondi.


    Non ricordo bene, ma se ti serve posso cercare i vecchi sorgenti VB, trattandosi di
    un codice semplicissimo probabilmente potrei tradurlo in PHP persino io.

    Ciao

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    Una possibilità.

    Codice PHP:
    <?php
    function h100($var1) {
        
    $var2 str_replace(':','.',$var1);
        return ((int) 
    $var2) + ((($var2 - (int) $var2)) / 0.6);
    }

    function 
    h60($var1) {
        return 
    str_replace('.',':',sprintf("%01.2f", ((int) $var1) + ((($var1 - (int) $var1)) * 0.6)));
    }

    print 
    "Conversione in centesimi di ore :<br/>";
    print 
    h100('1:16');
    print 
    "<br/>";
    print 
    h100('1:35');
    print 
    "<hr/>";
    print 
    "Conversione da centesimi di ore in ore normali :<br/>";
    print 
    h60(h100('1:16')+h100('1:35'));

    codice:
    Conversione in centesimi di ore :
    1.2666666666667
    1.5833333333333
    Conversione da centesimi di ore in ore normali : 2:51
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  7. #7
    @badaze
    Ottimo codice, che ho copiato nel mio toolbox di funzioni.
    Quindi se ho ben capito la richiesta all'origine del post : calcolo del tempo intercorso tra
    due orari, è sufficiente modificare l'ultima linea per avere la differenza invece della somma.

    Ho provato ad aggiungere del codice che controlla una delle due eccezioni che mi vengono in mente:
    orario che finisce il giorno successivo a quello di inizio [notturno], la seconda ovvero la necessita' di
    gestire almeno due entrate/uscite giornaliere... un'altra volta.

    Codice PHP:

    <?phpfunction h100($var1) {        $var2 str_replace(':','.',$var1);    return ((int) $var2) + ((($var2 - (int) $var2)) / 0.6);}
    function 
    h60($var1) {       return str_replace('.',':',sprintf("%01.2f", ((int) $var1) + ((($var1 - (int) $var1)) * 0.6)));        }$mezza '24:00';$inizio='08:00';$fine '16:00';
    $prima =0;$seconda=0;
    print 
    "Ora inizio : " h100($inizio) ;print "<hr/>";print "Ora fine "  .h100($fine);print "<hr/>";

    if (  
    h100($fine)   < h100($inizio)       ){         // calcolo fino alle 24     $prima=abs(h60(h100($inizio)-h100($mezza))) ;

            // calcolo dalle 24 a fine turno    $seconda =(24 - abs(  h60(h100($fine)-h100($mezza)) ) );    print "ORARIO NOTTURNO";    print "<hr/>";    print "ore fino alla mezzanotte : " . $prima;    print "<hr/>";    print "ore dopo la mezzanotte : "  . $seconda;    print "<hr/>";    print "ore totali : "  . ($seconda + $prima);    //print "Ore fine a mezzanotte : " . abs(h60(h100($inizio)-h100($mezza)));        } else {    print "ORARIO DIURNO";    print "<hr/>";    print " Ore TOTALI : " . ( h60(h100($fine)-h100($inizio)));    print "<hr/>";  }
    ?>
    Ho controllato con valori diversi e pare funzionare.
    Ultima modifica di curzio.maria; 06-05-2017 a 13:52

  8. #8
    Utilizzando le funzioni di @badaze ho provato ad aggiungere del codice che controlla una delle due eccezioni che mi vengono in mente:
    orario che finisce il giorno successivo a quello di inizio [notturno], la seconda ovvero la necessita' di
    gestire almeno due entrate/uscite giornaliere... un'altra volta.

    Codice PHP:

    <?

      
    // funzioni di @badaze
     
    phpfunction h100($var1) {    
        
    $var2 str_replace(':','.',$var1);  
      return ((int) 
    $var2) + ((($var2 - (int) $var2)) / 0.6);}

    function 
    h60($var1
    {       return 
    str_replace('.',':',sprintf("%01.2f", ((int) $var1) + ((($var1 - (int) $var1)) * 0.6)));  }



    //  fine funzioni

    $mezza '24:00'// potrebbe essere una costante
    $inizio='08:00';
    $fine '16:00';
    $prima =0;
    $seconda=0;
    print 
    "Ora inizio : " h100($inizio) ;
    print 
    "<hr/>";
    print 
    "Ora fine "  .h100($fine);
    print 
    "<hr/>";

    if (  
    h100($fine)   < h100($inizio)       )

    {         
    // calcolo fino alle 24 
             
    $prima=abs(h60(h100($inizio)-h100($mezza))) ;

            
    // calcolo dalle 24 a fine turno   
            
    $seconda =(24 abs(  h60(h100($fine)-h100($mezza)) ) );
           print 
    "ORARIO NOTTURNO";    
           print 
    "<hr/>";  
           print 
    "ore fino alla mezzanotte : " $prima
          print 
    "<hr/>";    
          print 
    "ore dopo la mezzanotte : "  $seconda
           print 
    "<hr/>";  
          print 
    "ore totali : "  . ($seconda $prima);   
       
            } 

    else {    
      print 
    "ORARIO DIURNO";  
         print 
    "<hr/>";    print " Ore TOTALI : " . ( h60(h100($fine)-h100($inizio)));  
         print 
    "<hr/>";  }
    ?>
    Ho controllato con valori diversi e pare funzionare.
    Ultima modifica di curzio.maria; 06-05-2017 a 14:00

  9. #9

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.