PehBehBeh

Erfahrungen eines Hobby-Webentwicklers

Lesbare Zeitdifferenz à la Facebook & Twitter mit PHP/WordPress darstellen

| Keine Kommentare

In sozialen Netzwerken wie Facebook und Twitter ist es üblich nicht den Zeitstempel eines Postings anzuzeigen, sondern die verstrichene Zeitspanne seit der Erstellung. In WordPress ist dies mit der Funktion human_time_diff() möglich, die sich schon seit Version 1.5 im Core befindet – doch was steckt eigentlich hinter dieser Funktion?


Die Funktion in WordPress

Der Funktion human_time_diff() besitzt einen Pflichtparameter ($from) und einen optionalen Parameter ($to). Zwischen diesen beiden Zeitstempeln wird die Differenz berechnet und in einem lesbaren Format zurückgegeben. Sollte kein zweiter Wert angegeben werden wird immer der aktuelle Zeitstempel verwendet, was in den meisten Fällen ausreichen sollte.

Beispiel 1: Artikel

1
<?php echo human_time_diff(get_the_time('U'), current_time('timestamp')) . ' ago'; ?>

Beispiel 2: Kommentare

1
<?php echo human_time_diff(get_the_time('U'), current_time('timestamp')) . ' ago'; ?>

Die eigene Funktion

Möchte man dieses Feature in die eigene (nicht-WordPress) Seite integrieren, muss man entweder selbst Hand anlegen oder in die wp-includes/formatting.php schauen. Dort findet man den Schnipsel der Funktion, der sich natürlich noch an die eigenen Bedürfnisse (z.B. die deutsche Sprache) anpassen lässt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function human_time_diff( $from, $to = '' ) {
        if ( empty($to) )
                $to = time();
        $diff = (int) abs($to - $from);
        if ($diff <= 3600) {
                $mins = round($diff / 60);
                if ($mins <= 1) {
                        $mins = 1;
                }
                /* translators: min=minute */
                $since = sprintf(_n('%s min', '%s mins', $mins), $mins);
        } else if (($diff <= 86400) && ($diff > 3600)) {
                $hours = round($diff / 3600);
                if ($hours <= 1) {
                        $hours = 1;
                }
                $since = sprintf(_n('%s hour', '%s hours', $hours), $hours);
        } elseif ($diff >= 86400) {
                $days = round($diff / 86400);
                if ($days <= 1) {
                        $days = 1;
                }
                $since = sprintf(_n('%s day', '%s days', $days), $days);
        }
        return $since;
}
Dir hat der Artikel gefallen?
Dann abonniere doch den RSS-Feed!