Visualizzazione dei risultati da 1 a 10 su 10

Discussione: differenza tra date

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883

    differenza tra date

    ragazzi ho scritto un codice per fare la differenza tra due date
    la differenza è di 12:59 minuti, solo che il mio codice mi restituisce come differenza 1 ora 12 minuti e 59 secondi (sbaglia di 1 ora), sapete dirmi dove sbaglio?
    questo è il codice:

    Codice PHP:

    $data_fine_en 
    =  '2012-04-29 22:41:16'
    $data_inizio_en =  '2012-04-29 22:28:17'
    $data_fine_timestamp strtotime($data_fine_en);
    $data_inizio_timestamp strtotime($data_inizio_en);
    $durata_timestamp $data_fine_timestamp-$data_inizio_timestamp;
    $durata date("H:i:s"$durata_timestamp);

    echo 
    $durata
    l'echo che vedete nel codice mi restituisce: 01:12:59 invece dovrebbe restituirmi: 00:12:59

  2. #2
    ciao,
    ho provato il tuo codice e funziona mi restituisce: 00:12:59

    l'unica cosa è che sulle prime due righe non hai messo il ; finale...

    Prova così:

    Codice PHP:
    <?php
    $data_fine_en 
    =  '2012-04-29 22:41:16' ;
    $data_inizio_en =  '2012-04-29 22:28:17'
    $data_fine_timestamp strtotime($data_fine_en); 
    $data_inizio_timestamp strtotime($data_inizio_en); 
    $durata_timestamp $data_fine_timestamp-$data_inizio_timestamp
    $durata date("H:i:s"$durata_timestamp); 

    echo 
    'Durata: '$durata;
    ?>
    Pubblicizza, Promuovi e Valuta il tuo sito su WebPortale
    Strategie e Consigli sul Gioco Manageriale di F1 GPRO GPRO STRATEGY
    Sito sulla Borsa con Gioco FantaBorsa Gioco-Borsa

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Anche io ho provato il codice, mettendo i ; altrimenti va in errore e non fa niente.

    Mi da lo stesso problema: 01:12:59

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    i punti e virgola mancanti sono stati una svista
    sul mio pc in locale il codice gira senza errori ma sbaglia di 1 ora a fare la differenza tra le due date
    leggo che il problema si verifica anche all'utente. Alhazred

    qualcuno ha idea del motivo?

    grazie

  5. #5
    che versione avete?

    io in locale provo con WAMPSERVER e il php è l versione 5.3.4
    Pubblicizza, Promuovi e Valuta il tuo sito su WebPortale
    Strategie e Consigli sul Gioco Manageriale di F1 GPRO GPRO STRATEGY
    Sito sulla Borsa con Gioco FantaBorsa Gioco-Borsa

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    io ho:

    Apache/2.2.15 (Win32) PHP/5.3.8

  7. #7
    la versione di Apache è 2.2.17

    ma non credo che siano così diverse le versioni da giustificare una simile differenza di risultato...

    io ti consiglio di installare WAMPSERVER per ora è il migliore che ho provato e non mi ha mai dato problemi...
    Pubblicizza, Promuovi e Valuta il tuo sito su WebPortale
    Strategie e Consigli sul Gioco Manageriale di F1 GPRO GPRO STRATEGY
    Sito sulla Borsa con Gioco FantaBorsa Gioco-Borsa

  8. #8
    Su alcuni server il timestamp non parte dal "1970-01-01 00:00:00", ma dal "1970-01-01 01:00:00". Per questo motivo convertendo la durata in una data risulta un ora in più.
    Codice PHP:
    var_dump(date("Y-m-d H:i:s"0)); // probabilmente vedrai "1970-01-01 01:00:00" 
    Io ti consiglierei una soluzione alternativa
    Codice PHP:
    $data_fine_en = new DateTime('2012-04-29 22:41:16');
    $data_inizio_en = new DateTime('2012-04-29 22:28:17');
    $durata $data_fine_en->diff($data_inizio_en);

    echo 
    $durata->format('%H:%i:%s'); 

  9. #9
    Ho provato ad usare questa funzione:
    Codice PHP:
    function differenza($ora1$ora2$sep){
        
    $part explode($sep$ora1);
        
    $arr explode($sep$ora2);
        
    $diffmktime($arr[0], $arr[1], $arr[2]) - mktime($part[0], $part[1], $part[2]);
        
    $ore=floor($diff / (60*60));  
        
    $minuti=($diff 60) % 60;
        
    $secondi = ($diff - ($minuti 60) - ($ore 60 *60));
        
    $ore str_pad($ore,2,0,STR_PAD_LEFT);
        
    $minuti str_pad($minuti,2,0,STR_PAD_LEFT);
        
    $secondi str_pad($secondi,2,0,STR_PAD_LEFT);
        
    $risultato $ore.":".$minuti.":".$secondi;
        return 
    $risultato;

    La funzione la richiamo in questa maniera:
    Se ho le sole ore è tutto semplice:
    Codice PHP:
    $ora1="08:35";
    $ora2="11:50";
    $differenza=differenza($ora1,$ora2,":");
    echo 
    "Tempo tra le due date: " $differenza "
    \n"

    Altrimenti, e questo è il nostro caso, prima troviamo le 2 ore e poi andiamo alla funzione:
    Codice PHP:
    $data_fine_en =  '2012-04-29 22:41:16';
    $data_inizio_en =  '2012-04-29 22:28:17';
    $data_fine_timestamp strtotime($data_fine_en);
    $data_inizio_timestamp strtotime($data_inizio_en);
    $start date('H:i:s',$data_inizio_timestamp);
    $end date('H:i:s',$data_fine_timestamp);
    $differenza=differenza($start,$end,":");
    echo 
    "Tempo tra le due date: " $differenza "
    \n"

    Come separatore ho usato i due punti ( : ) perchè qui ed in molti casi vengono usati questi come separatori.

  10. #10
    PS:
    come funzione è un po' lunga ma a me sembra valida.

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.