funzione tempo

Felice Gattuso

Utente Attivo
19 Ago 2012
41
0
0
semplice ragazzi... voglio fare che in modo che questa funziona mi ritorni anche il tempo in settimane mesi e anni... io ho provato con la soluzione matematica più semplice ma niente... qualche idea ?

PHP:
function passati($t){
    $ora=time(); 
    $secondi_passati=abs($t-$ora); 
    if($secondi_passati == 0){ 
        return "Adesso"; 
    }elseif($secondi_passati <60){ 
        return "$secondi_passati secondi fa"; 
    }elseif($secondi_passati >=60 && $secondi_passati <(60*60)){ 
        $minuti=(int)($secondi_passati/60); 
        return "$minuti minuti fa"; 
    }elseif($secondi_passati >=(60*60) && $secondi_passati <(24*60*60)){ 
        $ore =(int)($secondi_passati/(60*60)); 
        return "$ore ore fa"; 
    }elseif($secondi_passati >=(24*60*60) && $secondi_passati <(7*24*60*60)){ 
        $giorni=(int)($secondi_passati/(24*60*60));
		return "$giorni giorni fa";
        
    }else{ 
        return "Più di una settimana fa"; 
    } 
}
 
ciao
vista cosi dovrebbe funzionare, forse l'unica cosa che vedo e mettere la prima elesif

PHP:
}elseif($secondi_passati > 0 && $secondi_passati <60){
sei sicuro che $t sia un timestamp?
comunque ci do un occhio meglio poi ti so dire
 
ciao,
ho appena partorito il codice seguente
è un alternativa alla tua, è necessario però un database,nel mio caso MYSQL
PHP:
<?php

function passati($t) {
    // file di connessione al database
    include_once 'connessione.php';
    // array
    $array = array(
        'SECOND' => array(60 => 'secondi'),
        'MINUTE' => array(3600 => 'minuti'),
        'HOUR' => array(86400 => 'ore'),
        'DAY' => array(604800 => 'giorni'),
        'WEEK' => array(2721600 => 'settimane'),
        'MONTH' => array(32659200 => 'mesi'),
        'YEAR' => array(32659201 => 'anni')
    );
    // differenza in secondi
    $diff = time() - $t;
    // ciclo di verifica
    foreach ($array as $key => $value) {
        if (isset($tempo))
            break;
        foreach ($value as $k => $v) {
            if ($diff < $k) {
                echo $k . "<br/>";
                $tempo = $key;
                break;
            }
        }
    }
    // se non ho il tempo allora sono anni
    if (!isset($tempo)) {
        $tempo = "YEAR";
    }
    // formatto la data di partenza
    $partenza = date('Y-m-d H:i:s', $t);
    // calcolo la differenza
    $query = "SELECT TIMESTAMPDIFF($tempo,'$partenza',NOW()) as diff";
    // se va a buon fine restituisco il risultato
    if ($result = mysql_query($query)) {
        return mysql_result($result, 0, 'diff') . " " . $array[$tempo][$k] . " fa";
    }
    // altrimenti avviso qualcosa è andato storto
    return "errore";
}

// richiamo passando un time di 2 minuti fa
echo passati(time() - 120);
?>
ho il server locale sballato di due ore di conseguenza i test sono stati limitati, ho commentato leggermente magari a mente fresca si puo migliorare qualcosa
 
PHP:
function passati($t){ 
    $ora=time();  
    $secondi_passati=abs($t-$ora);  
    if($secondi_passati == 0){  
        return "Adesso";  
    }elseif($secondi_passati <60){  
        return "$secondi_passati secondi fa";  
    }elseif($secondi_passati >=60 && $secondi_passati <(60*60)){  
        $minuti=(int)($secondi_passati/60);  
        return "$minuti minuti fa";  
    }elseif($secondi_passati >=(60*60) && $secondi_passati <(24*60*60)){  
        $ore =(int)($secondi_passati/(60*60));  
        return "$ore ore fa";  
    }elseif($secondi_passati >=(24*60*60) && $secondi_passati <(7*24*60*60)){  
        $giorni=(int)($secondi_passati/(24*60*60)); 
        return "$giorni giorni fa"; 
    }elseif($secondi_passati >=(7*24*60*60) && $secondi_passati <(30*24*60*60)){  
        $settimane=(int)($secondi_passati/(7*24*60*60)); 
        return "$settimane settimane fa";
    }elseif($secondi_passati >=(30*24*60*60) && $secondi_passati <(365*24*60*60)){  
        $mesi=(int)($secondi_passati/(30*24*60*60)); 
        return "$mesi mesi fa"; 
    } else
        return "più di un anno fa";
}
Prova con questo. Sono da cellulare e non ho potuto testare, controlla anche se ho commesso qualche errore dovuto all'auto-correzione.
Che vuol dire che avevi provato con la soluzione matematica? (In teoria dovrebbe essere questa salvo errori).
 

Discussioni simili