Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    258

    Da secondi a ore e minuti

    Ciao a tutti, sto avendo difficolt� con la formattazione di ore minuti. In pratica io salvo delle ore sul database mysql nel formato time 00:00:00, fin qui tutto ok. Poi devo sommare diversi campi per avere un totale, in questo caso utilizzo: SEC_TO_TIME(SUM(TIME_TO_SEC(ore_diurne))). Anche in questo caso funziona mi viene restituito il totale es. 12:00:00 io poi devo sommare questo date con un altra totale di ore che prelevo da un altra tabella sempre nel formato time quindi 03:00:00.

    Per sommare il tutto faccio in questo modo:

    Codice PHP:
    $time_dato_1 explode(":",$row1[0]);
    $sum_1 $time_dato_1 [0]*60 $time_dato_1 [1];

    $time_dato_2 explode(":",$row2[0]);
    $sum_2 $time_dato_2 [0]*60 $time_dato_2 [1];

    $totale $sum_1 $sum_2// mi restituisce 900 
    Cosi ho il totale in secondi, quindi 15 ore sono 900 io pero ho necessit� di far visualizzare questo dato in formato 15:00:00, ed ho fatto le prove con questo codice:

    Codice PHP:
    $seconds $totale//900$H = floor($seconds / 3600);$i = ($seconds / 60) % 60;$s = $seconds % 60;$totale = sprintf("%02d:%02d:%02d", $H, $i, $s);
    // Mi restituisce 00:15:00 

    Codice PHP:
    gmdate('H:i',($totale )*60); 
    nel primo caso funziona correttamente per� c'� un problema se tipo ho piu di 60 ore es. 62 ore mi conteggia 1 giorno e 2 ore. Mentre a me serve chi mi restituisca 62 ore, invece con il secondo metodo ho problemi gi� superando 24 ore

    Avete qualche consiglio da darmi, magari sbaglio io metodo...

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    783
    Io ti consiglio di usare la classe Datetime su php ed il data type datetime su mysql.

    Quando in php hai un oggetto Datetime puoi formattarlo come vuoi o prendere il valore in timestamp con il metodo getTimestamp()

    Con i timestamp (che sono valori in secondi), dovrebbe essere più semplice fare quello che ti serve.

  3. #3
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    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

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    258
    Grazie ad entrambi per la risposta, ho dato uno sguardo al link di badaze, ed ho cercato di implementare la sua funzione:

    Codice 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')); 
    Funziona correttamente, adesso mi visualizza la somma delle ore maggiori di 60. L'unico problema riguarda i minuti. in pratica se io faccio questa somma:

    34:00 + 8:00 + 30:30 + 5:30 = 77:60

    Mentre dovrebbe restituire 78:00

    posto parte del codice che utilizzo, magari sbaglio io qualcosa:

    Codice PHP:
    $time_array_ae explode(":",$row[0]);
    $ae $time_array_ae[0].":".$time_array_ae[1];
    $time_array_be explode(":",$row[1]);
    $be $time_array_be[0].":".$time_array_be[1];
    $time_array_ce explode(":",$row[2]);
    $ce $time_array_ce[0].":".$time_array_ce[1];

    $prova h60(h100($ae) + h100($be) + h100($ce));


    $time_array_ap explode(":",$row_pr[0]);
    $ap $time_array_ap[0].":".$time_array_ap[1];
    $time_array_bp explode(":",$row_pr[1]);
    $bp $time_array_bp[0].":".$time_array_bp[1];
    $time_array_cp explode(":",$row_pr[2]);
    $cp $time_array_cp[0].":".$time_array_cp[1];

    $prova1 h60(h100($ap) + h100($bp) + h100($cp));

    $totale_prova h60(h100($prova)+h100($prova1)); 
    Ultima modifica di sixdas; 27-05-2017 a 12:19

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    se fai :

    Codice PHP:
    print h60(h100('34:00') + h100('8:00') + h100('30:30') + h100('5:30')); 
    Ottieni 78:00
    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

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.