2009-06-25 15 views
6

Ich versuche, ein wenig Mathe mit Daten in PHP zu tun. Ich modifiziere eine Shoutbox, und ich möchte die folgende Funktionalität implementieren.PHP Datum Frage


Wenn Post Datum heute =, die Zeit der Postrück

else if date = gestern, return "gestern"

anderes Datum = X Tagen


Wie würde Ich benutze die Datumsfunktionen von PHP, um zu berechnen, wie viele Tage ein Zeitstempel alt ist (der Zeitstempel ist in UNIX-Zeit formatiert)

Antwort

8

Versuchen Sie folgendes:

$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

perfekt. Vielen Dank –

3

In PHP 5.3.0 oder höher können Sie DateTime::diff (aka date_diff()) verwenden.

In so ziemlich jedem PHP können Sie die Daten in Unix-Zeitstempel umwandeln und den Unterschied zwischen ihnen durch 86400 (1 Tag in Sekunden) teilen.

+0

Vergessen Sie nicht, dass PHP 5.3 noch nicht aus ist (Stand Juni 2009) – Greg

0

Verwenden Klasse Datetime und dann haben Sie eine Methode diff.

0

Verwenden Sie date_parse.
Aus dem Handbuch:

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

Wird

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

die Tatsache Verwenden Sie drucken, dass die Zeiten in Sekunden gespeichert werden:

$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

Ich glaube nicht, dass Sie wies darauf hin, ist schon kann strtotime verwenden, um "gestern" zu erhalten. Es macht es mehr lesbar (und leichter zu merken) als die Berechnung von Daten "von Hand" und ist wahrscheinlich auch weniger fehleranfällig.

$ int = strtotime ('Gestern');


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."; 
}