Visualizzazione dei risultati da 1 a 7 su 7

Discussione: TIMEDIFF in sql

  1. #1

    TIMEDIFF in sql

    Ciao a tutti..

    Ho guardato le pillole per fare una differenza tra 2 date e' ho trovato questa spegazione:

    select TIMEDIFF('2004-12-31 23:59:59', '2004-01-01 00:00:00') RISULTATO -> 8783:59:59
    ecco il totale numero delle ore:min:sec di un anno bisestile.

    ... Ma come faccio poi a convertirlo in anno-mm-gg hh:mm:ss ???


  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2000
    residenza
    Edinburgh
    Messaggi
    401
    Un po' approssimato (considero 1 mese = 30 giorni) ma direi:

    Codice PHP:
    // Trovi ore minuti e secondi da DB

    $giorni 0;
    $mesi 0;
    $anni 0;

    if (
    $ore 24)
       {
       
    $giorni floor($ore/24);
       
    $ore $ore 24;   // Questo trova il resto della divisione
       
    }

    if (
    $giorni 30)
       {
       
    $mesi floor($giorni)/30;
       
    $giorni $giorni 30;
       }

    if (
    $mesi 12)
      {
      
    $anni floor($mesi)/12;
      
    $mesi $mesi 12;
      } 
    Non l'ho testato ma dovrebbe andare

  3. #3
    Grazie...

    Scusa ma non capisco .. io ho la variable $differenza in hh:mm:ss.. come faccio a inserirla nel tuo script ?


    Ho provato a nche la query nel mio db...


    SELECT TIMEDIFF('data_attivazione', 'data_disattivazione') AS differenza FROM sconti

    mi restituisce sempre 00:00:00 ... come mai ? epure le date ci sono...

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2000
    residenza
    Edinburgh
    Messaggi
    401
    Metti anche l'ora?

    Cioè se fai:

    codice:
    select timediff("2008-08-05 00:00:00", "2008-08-02 00:00:00")
    funziona (restituisce 72:00:00)

    mentre se fai

    codice:
    select timediff("2008-08-05", "2008-08-02")
    non funziona.

    In PHP faresti:

    Codice PHP:
    $query "SELECT TIMEDIFF(campo1, campo2) AS diff FROM tabella";
    $res mysql_query($query);
    $row mysql_fetch_array($res);
    $diff split($row['diff'], ':');
    $ore $diff[0];
    $min $diff[1];
    $sec $diff[2]; 
    Poi applichi il resto che ti ho scritto sopra.

    Nota che se non te ne frega niente di ore minuti e secondi, ma vuoi solo i giorni di differenza puoi usare DATEDIFF invece di TIMEDIFF (e puoi trovare mesi e anni con lo script di sopra)

  5. #5
    Adesso funziona !!!

    Ecco cosa mi restituisce..

    NULL
    00:00:37
    00:00:23
    00:02:22
    00:00:16
    00:00:47
    744:00:12

    Mi da questo errore in php...

    Warning: split() [function.split]: REG_EMPTY

  6. #6
    Ciao a tutti.. ho cercato di farlo ma non ci riesco... ecco tutto il codice....

    $query = "SELECT TIMEDIFF(data_disattivazione, data_attivazione) AS diff FROM sconti";
    $ris = mysql_query($query, $cn) or die (mysql_error());
    $riga=mysql_fetch_array($ris);

    $diff=$riga['diff'];


    /* Trovi ore minuti e secondi da DB approssimando 1 mese 30 giorni */

    $data_array = explode(" ", $diff);
    $gma = explode(":", $data_array[0]);
    $ore = $gma[0];
    $min = $gma[1];
    $sec = $gma[2];


    $giorni = 0;
    $mesi = 0;
    $anni = 0;

    if ($ore > 24)
    {
    $giorni = floor($ore/24);
    $ore = $ore % 24; // Questo trova il resto della divisione
    }

    if ($giorni > 30)
    {
    $mesi = floor($giorni)/30;
    $giorni = $giorni % 30;
    }

    if ($mesi > 12)
    {
    $anni = floor($mesi)/12;
    $mesi = $mesi % 12;
    }


    /* Creo la data */
    echo ecco la differenza di ;
    echo $giorni;
    echo $mesi;
    echo $anni;

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2000
    residenza
    Edinburgh
    Messaggi
    401
    L'errore di split è probabilmente dovuto al fatto che si usa al contrario di come avevo scritto...

    Comunque tu hai usato explode che fa la stessa cosa, quindi va bene.

    Non capisco perchè fai

    Codice PHP:
    $data_array explode(" "$diff); 
    visto che non ci sono spazi...

    A parte quello l'unico errore che vedo è:

    Codice PHP:
    echo ecco la differenza di 
    in cui mancano le virgolette

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.