Zeitdifferenz in Worten darstellen
14. April 2009 | In: Php
Php Zeitfunktionen gibt es zwar massenweise, doch möchte man eine Zeitdifferenz in Worten darstellen, so bietet Php dafür leider kein Zeitformat an.
Die Funktion timelag2words() erledigt diese Aufgabe und liefert beim Aufruf folgende Ausgabe:
Aufruf
printf( 'Vor ca. %s', timelag2words( mktime( 1, 2, 3, 12, 32, 1997 ), null, 6 ) ); |
Ausgabe
Vor ca. 11 Jahren, 3 Monaten, 16 Tagen, 11 Stunden, 53 Minuten, 51 Sekunden
Über den Paramater $granularity lässt sich genau einstellen, welche Zeitkomponenten im Ergebnis enthalten sein sollen. Die Funktion kann alternativ ein unformatiertes Array mit Werten zurückliefern.
Achtung! timelag2words() beachtet keine Schaltjahre und rechnet damit, dass jeder Monat 30 Tage hat. Deshalb macht es Sinn, vor die Ausgabe “ca.” zu schreiben.
/** * timelag2words * * @param timestamp $from Von Zeitpunkt * @param timestamp $to Bis Zeitfunkt default jetzt * @param integer $granularity Was soll alles angezeigt werden 1-6 * @param array $titles Titel können in anderer Sprach übergeben werden * @param string $return return type, string default, array sonst * * @return array */ function timelag2words( $from, $to = null, $granularity = 6, $titles = null, $return = 'string' ) { if( is_null( $titles ) ) { $titles = array( array( 'Jahr', 'Monat', 'Tag', 'Stunde', 'Minute', 'Sekunde' ), array( 'Jahren', 'Monaten', 'Tagen', 'Stunden', 'Minuten', 'Sekunden' ) ); } $time = ( is_null( $to ) ? time() : $to ) - $from; $result = array(); foreach( array( 31536000, 2592000, 86400, 3600, 60, 1 ) as $index => $delta ) { if( ( $current = intval( $time / $delta ) ) > 0 ) { if( $granularity >= $index + 1 ) { $result[] = $current . ' ' . $titles[ $current == 1 ? 0 : 1 ][ $index ]; } $time -= $current * $delta; } } return( $return == 'string' ? implode( ', ', $result ) : $result ); } |

Schreib einen Kommentar
Fülle das Kommentar-Formular vollständig aus oder melde dich über Twitter oder Facebook an.