[PHP] Datum im "Facebook-Stil" ausgeben

[PHP] Datum im "Facebook-Stil" ausgeben

Ich arbeite zurzeit an einem kleinen Messenger-Projekt und nutze dafür PHP. Für die Ausgabe des Datums habe ich mich dieses mal für den "Facebook-Stil" entschieden. In meinem ersten Tutorial hier auf dieser Seite würde ich euch gerne erklären, wie ihr dies umsetzen könnt.


Ein Beispiel:
Standard Format: Kommentar wurde verfasst am 17.08.2012 - 20:30 Uhr
Facebook Stil: Kommentar wurde verfast "vor 2 Stunden"

Ich stelle euch hier meine Funktion zur Verfügung und erkläre euch im Anschluss darauf wie alles funktioniert.

1. Die Funktion: date.inc.php

PHP:
<?php

// Datum im Facebook Stil
function niceDate($timestamp)
{
    $difference = time() - $timestamp;
    $periods = array("Sekunde", 
                     "Minute", 
                     "Stunde", 
                     "Tage", 
                     "Woche",
                     "Monate", 
                     "Jahre", 
                     "Jahrzehnte"
    );
    $lengths = array("60","60","24","7","4.35","12","10");

    if ($difference > 0) 
    {
        // Vergangenheit
        $ending = "vor";
    } else {
        // Zukunft
        $difference = -$difference;
        $ending = "noch";
    }

    for($j = 0; $difference >= $lengths[$j]; $j++)
	{
		$difference /= $lengths[$j];
		$difference = round($difference);
	}
    
    if($difference != 1) 
    {
        $periods[$j].= "n";
    }
    else
    {
        if($periods[$j] == "Woche" || $periods[$j] == "Stunde" || $periods[$j] == "Minute" || $periods[$j] == "Sekunde")
        {
            $periods[$j] = $periods[$j];
        }
        else
        {
            $periods[$j] = substr($periods[$j], 0, -1);
        }
    }
    
    $date= "$ending $difference $periods[$j]";
    
    return $date;
}
?>

Im Detail erklärt:

1.
PHP:
$difference = time() - $timestamp;

Berechnet die Differenz zwischen der aktuellen Serverzeit und eurem Timestamp. Der Timestamp kann beispielsweise aus einer Datenbank stammen. Solltet ihr in eurer Datenbank das DATETIME Format nutzen, dann konvertiert das Datum bei der SELECT Abfrage direkt in einen Unix-Timestamp um.

Das Datum könnt ihr folgendermaßen zu einem Unix-Timestamp konvertieren:
Code:
SELECT 
	id,
	nachricht,
	UNIX_TIMESTAMP(date) AS unix_date
FROM 
	nachrichten

2.
PHP:
if ($difference > 0) 
{
	// Vergangenheit
	$ending = "vor";
} else {
	// Zukunft
	$difference = -$difference;
	$ending = "noch";
}

Pürft, ob die Zeitdifferenz in der Vergangenheit oder in der Zukunft liegt und legt dementsprechend die $ending Variable fest, welche später zur Ausgabe dient.


3.
PHP:
if($difference != 1) 
{
	$periods[$j].= "n";
}
else
{
	if($periods[$j] == "Woche" || $periods[$j] == "Stunde" || $periods[$j] == "Minute" || $periods[$j] == "Sekunde")
	{
		$periods[$j] = $periods[$j];
	}
	else
	{
		$periods[$j] = substr($periods[$j], 0, -1);
	}
}

Hier wird zuerst geprüft, ob die Differenz ungleich 1 ist was bewirkt, dass die Perioden in der Mehrzahl ausgegeben werden (Beispiel: vor 2 Tage"n"). In der darauffolgenden if-Abfrage dient der späteren Lesbarkeit. (Beispiel: 1 Tag(e) - grammatikalisch falsch) Daher wird für die Perioden "Tage, Monate, Jahre und Jahrzehnte" das letzte Zeichen abgeschnitten woraus sich ergibt: 1 Tag, 1 Monat, 1 Jahr, 1 Jahrzehnt.


4.
PHP:
$date= "$ending $difference $periods[$j]";
Zusammenbau der Variable, welche für die Ausgabe der Differenz-Zeit zuständig ist.


Fertiges Beispiel:
PHP:
<?php

// Include der Funktions-Datei
include("date.inc.php");

// Aktuelle Zeit als Timestamp
$timestamp = time();
$niceDate = niceDate($timestamp);

echo $niceDate;

?>


Fertig!

Ich hoffe mein erstes Tutorial hat euch gefallen. Ich würde mich sehr über Feedback / Verbesserungsvorschläge freuen.

Vielen Dank für's lesen!

Euer
Chans
Autor
chans
Aufrufe
1.428
First release
Last update
Bewertung
0,00 Stern(e) 0 Bewertungen
Zurück