2010-08-12 6 views
1

j'ai donc cette fonction pour afficher le temps généré par l'horodatage de format unix inséré (time()):PHP: Il y a une heure, il y a x heures

function get_time($timestamp) { 
    $time = date('G:i', $timestamp); 
    echo " at: ".$time; 
    return $time; 
} 

Je voudrais étendre cette fonction et que comme si c'était moins de 24 heures, il devrait calculer et faire écho "x heures", si c'est hier ou plus tard, il devrait juste faire écho comme il le fait maintenant (echo "at:". $ time;)

Comment cela peut-il être fait?

+0

Quelle est la difficulté que vous rencontrez? – Artefacto

+0

difficulté? Juste un moyen gentil/simple, il peut être fait, pas vraiment une difficulté spéciale "niveau" im la recherche. (désolé si j'ai mal compris votre question, je ne suis pas anglais) – Karem

+0

duplication possible de [PHP Comment trouver le temps écoulé depuis une date?] (http://stackoverflow.com/questions/2915864/php-how-to-find -le temps écoulé-depuis-une-date-heure) – raveren

Répondre

5

Moins de 24 heures il y a 3600 * 24, à savoir

$time_now-3600*24 

puis

if($timestamp > (time() - (3600*24))) { 

// Calculate time difference 

$diff = time() - $timestamp; 

$hours = $diff/3600; 

echo $hours . " hours ago"; 

} else { 

echo "at" . date("x-y-z", $timestamp"); 

} 
+0

le temps est en secondes, la division devrait être '$ diff/(24 * 3600)' –

+1

quelques modifications: dbl quotes par timestamp et $ diff/3600 non 24. Sinon, une manière solide de l'approcher; créer une fonction et ajouter quelques options (... "jours", "Dernier mercredi" etc) et vous êtes en bonne forme. – Hans

+0

@Hans: Réservoirs, mis à jour le code. $ diff/3600 est bien sûr correct. – matiasf

0
/* 
* @author Alexander.Plutov 
* @param int $timestamp 
* @param float $hours_ago 
* @return date 
*/ 
function get_time($timestamp, $hours_ago) { 
    $seconds_ago = $hours_ago * 60 * 60 * 24; 
    $new_timestamp = $timestamp - $seconds_ago; 
    $time = date('G:i', $new_timestamp); 
    echo " at: ".$time; 
    return $time; 
}