2009-06-25 10 views
6

J'essaie de faire un peu de maths en utilisant des dates en PHP. Je suis en train de modifier une shoutbox et je veux implémenter les fonctionnalités suivantes.PHP Date Question


Si la date post = aujourd'hui, temps de retour du poste

autre si la date = hier, le retour "hier"

Date ELSE = X jours il y a


Comment serait J'utilise les fonctions de date de php pour calculer combien de jours il y a un horodatage (l'horodatage est formaté en temps UNIX)

Répondre

8

Essayez ceci:

$shoutDate = date('Y-m-d', $shoutTime); 
if ($shoutDate == date('Y-m-d')) 
    return date('H:i', $shoutTime); 

if ($shoutDate == date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') - 1, date('Y')))) 
    return 'yesterday'; 

return gregoriantojd(date('m'), date('d'), date('y')) - gregoriantojd(date('m', $shoutTime), date('d', $shoutTime), date('y', $shoutTime)) . ' days ago'; 
+0

parfait. merci beaucoup –

3

En php 5.3.0 ou supérieur, vous pouvez utiliser DateTime::diff (alias date_diff()).

Dans presque tous les php, vous pouvez convertir les dates en timestamp Unix et diviser la différence entre eux par 86400 (1 jour en secondes).

+0

Ne pas oublier que PHP 5.3 est pas encore (en Juin 2009) – Greg

0

Utilisez la classe DateTime et vous avez une méthode diff.

0

Essayez d'utiliser date_parse.
A partir du manuel:

<?php 
print_r(date_parse("2006-12-12 10:00:00.5")); 
?> 

imprimera

Array 
(
    [year] => 2006 
    [month] => 12 
    [day] => 12 
    [hour] => 10 
    [minute] => 0 
    [second] => 0 
    [fraction] => 0.5 
    [warning_count] => 0 
    [warnings] => Array() 
    [error_count] => 0 
    [errors] => Array() 
    [is_localtime] => 
) 
3

Utilisez le fait que les temps sont stockés en quelques secondes:

$days = floor(($shoutTime - time())/86400) + 1; // 86400 = 24*60*60 

switch ($days) { 
    case 0: 
    return date('H:i', $shoutTime); 
    case -1: 
    return 'yesterday'; 
    case 1: 
    return 'tomorrow'; 
} 

return "$days ago"; 
1

Je ne pense pas qu'il a été signalé que vous peut utiliser strtotime pour obtenir "Hier". Il est plus lisible (et plus facile à mémoriser) que le calcul des dates "à la main" et est probablement moins sujette aux erreurs.

$ int = strtotime ('Yesterday');


if(date('Y-m-d', $shoutTime) == date('Y-m-d') { 
    return date('H:i:s', $shouTime); 
} elseif(date('Y-m-d', $shoutTime) == date('Y-m-d', strtotime('Yesterday')) { 
    return "Yesterday."; 
} else { 
    $days = floor($shoutTime - time()/86400); 
    return "$days ago."; 
}