Bookmarken Twitter Feed

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 );
}
Bewertung: najagut
Loading ... Loading ...

Ähnliche Beiträge

Schreib einen Kommentar

Fülle das Kommentar-Formular vollständig aus oder melde dich über Twitter oder Facebook an.
Sign in with Facebook

By Teledir Internetanbieter