Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Sommare ore con php

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    68

    Sommare ore con php

    Ciao a tutti,
    intanto ringrazio per i vostri aiuti che ho ricevuto.
    Ora avrei bisogno di un altro vostro aiuto....
    ho già una funzione che mi somma 2 ore e che funziona bene tranne che per una cosa.
    Superata la somma di 23:59:59, mi da la differenza delle ore totali - 24 ore ossia se io ho un totale di 27:10:00 mi ritorna 03:10:00.
    Come devo fare per ottenere appunto il valore della somma delle varie ore anche superando la sogla delle 24?

    Allego il codice della funzione (recuperata in rete)

    codice:
    function somma($time1, $time2){
    //$time1 e $time2 devono essere nel formato "oo:mm:ss"
    
    
    $t1=explode(":",$time1);
    $t2=explode(":",$time2);
    
    
    //Senza considerare l'overflow
    $sec=$t1[2]+$t2[2];
    $min=$t1[1]+$t2[1];
    $ora=$t1[0]+$t2[0];
    
    
    //Effettuo il controllo sull'overflow
    //61sec=1min+1sec ecc...
    $min+=floor($sec/60);
    $ora+=floor($min/60);
    
    
    //Elimino l'overflow
    $sec=fmod($sec,60);
    $min=fmod($min,60);
    $ora=fmod($ora,24);
    
    
    //Aggiungo gli zeri ai valori minori di 10
    $sec=($sec<10 ? "0" : "").$sec;
    $min=($min<10 ? "0" : "").$min;
    $ora=($ora<10 ? "0" : "").$ora;
    
    
    $time=$ora.":".$min.":".$sec;
    return $time;
    }
    Grazie per l'aiuto

    Federico

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Basta che elimini il blocco di codice che si occupa dell'overflow, ottenendo quindi
    Codice PHP:
    function somma($time1$time2){
        
    //$time1 e $time2 devono essere nel formato "oo:mm:ss"

        
    $t1=explode(":",$time1);
        
    $t2=explode(":",$time2);

        
    //Senza considerare l'overflow
        
    $sec=$t1[2]+$t2[2];
        
    $min=$t1[1]+$t2[1];
        
    $ora=$t1[0]+$t2[0];

        
    $time=$ora.":".$min.":".$sec;
        return 
    $time;
    }

    // stampa 25:59:59
    echo somma('23:59:59','2:00:00'); 

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    68
    Ciao Alhazred e grazie...non ci avevo pensato.
    Però c'è un però, eliminando tutto il blocco dell'overflow, arrivi ad un certo punto che se sommo più tempi, i minuti arrivati a 59, anzichè incrementare l'ora continuano a sommarsi fra di loro e basta.
    Per risolvere il problema ho eliminato dalla funzione soltanto la riga
    $ora=fmod($ora,24);

    Sembra funzioare tutto.
    Ciao e grazie ancora
    Federico

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 © 2025 vBulletin Solutions, Inc. All rights reserved.