Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    problema con la differenza fra 2date

    avevo uno script che ha sempre funzionato e che mi restituiva la differenza, in giorni, fra 2 date. Stamattina però tento di accedere e mi restituisce non più un numero intero, bensì un numero con ben 9 decimali, e non ne capisco il motivo. Ho risolto mettendo un round() ma volevo capire come mai di punto in bianco si è messo a sclerare in questo modo. Lo stesso script ce l'avevo su due server diversi e in entrambi stamattina ha avuto lo stesso comportamento.

    Questo è il pezzo di codice in cui calcolo la differenza:
    codice:
    <?
    	$dmin = "SELECT data FROM click ORDER BY data ASC LIMIT 0,1";
    	$rmin = mysql_query($dmin)or die("Errore: ".mysql_error());
    	
    	$rowd = mysql_fetch_assoc($rmin);
    	
    	$pezzi = explode('-', $rowd['data']);
    	$data_inizio = mktime (0,0,0,$pezzi[1],$pezzi[2],$pezzi[0]);
    	$data_oggi = mktime (0,0,0,date("m"),date("d"),date("Y"));
    	
    	$diff = $data_oggi-$data_inizio;
    	$numerogiorni=$diff/60/60/24;
    	
    	echo 'Numero Giorni: '.$numerogiorni;
    	$media = $mio_tot/$numerogiorni;
    	$media = number_format($media, 1, ',','.');
    	echo '
    Media accessi per giorno: '.$media;
    
    ?>
    come avrete notato la data_inizio è salvata in un batabase con formato DATE [aaaa-mm-gg].

    Io ho risolto mettendo un round() a numerogiorni, ma vorrei capire meglio il perché di questo comportamento.

    C'è qualcuno disposto a spiegarmelo?

    Grazie mille!
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  2. #2
    Con quella divisione hai sempre (facilmente) dei valori decimali da gestire.... dovresti usare floor() in modo da avere sempre giorni interi e resto (ore min sec). Se vuoi conosce il resto usa il modulo.
    codice:
      $diff = $data_oggi-$data_inizio;
      $numerogiorni=floor($diff / (60*60*24));
    Per la verita' non capisco come prima poteva darti sempre un intero.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Pensandoci bene non lo capisco nemmeno io
    si vede che beccavo sempre il momento giusto [o sbagliato, dipende dai punti di vista] per accedere allo script.

    Grazie mille!
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  4. #4
    Originariamente inviato da 13manuel84
    Pensandoci bene non lo capisco nemmeno io
    si vede che beccavo sempre il momento giusto [o sbagliato, dipende dai punti di vista] per accedere allo script.

    Grazie mille!
    Ok una risposta logica c'e'.

    Finora tu riducevi il timestamp a livello di giorni. Quindi gli step sul timestamp erano di 24 ore. Ora c'e' stata l'ora legale ed il 31 ottobre era di 25 ore.

    Quindi le date precedenti al 31 ottobre confrontate con le date dopo il 31 non sono piu' intere ma frazionate.

    That's all. Miracoli non c'e' ne sono mai nel software. Era da considerare un tuo bug. (evento non previsto).


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    &Egrave; vero!non c'avevo minimamente pensato!

    Grazie mille per la spiegazione dettagliata!
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

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.