Mit PHP: Zeit in einen gut lesbaren Text umwandeln

Mit einem kleinen PHP-Code Snippet kann man ganz einfach eine gegebene Zeit (in Sekunden) in einen gut lesbaren Text umwandeln. Dabei wird die Zeit in Wochen, Tagen, Stunden, Minuten und Sekunden (Singular/Plural ist berücksichtigt) ausgegeben. Hier dieser Snippet:

PHP
	/*****************************************************************************************
	/* Berechnet aus dem Wert $theTime einen String:
	/*			MakeTimeDiffString( 604800 * 2 + 86400 * 3 + 60 + 5 ) ergibt:
	/*        		  in 2 Wochen, 3 Tagen, 1 Minute und 5 Sekunden
	/*  bei 0		  jetzt
	/*  positiver Wert:       in...
	/*  negativer Wert:       vor...
	/* 
	/****************************************************************************************/
	function MakeTimeDiffString( $theTime ) {
		$week = 604800;
		$day = 86400;
		$hour = 3600;
		$minute = 60;
		$add = false;
		$timeText = "";
		
		if ( $theTime == 0 ) return( "jetzt" );
		if ( $theTime < 0 ) { $timeText = "vor "; $theTime = $theTime *- 1; }
		else $timeText = "in ";		
		if ( $theTime >= $week ) { 
			$timeText .= intdiv( $theTime, $week )." ".( intdiv( $theTime, $week ) > 1 ? "Wochen" : "Woche"); 
			$theTime -= $week * intdiv( $theTime, $week );
			$add = true;
		} else $add = false;
		if ( $theTime >= $day ) { 
			$timeText .= ($add === true ? ( $theTime - $day * intdiv( $theTime, $day ) > 0 ? ", " : " und " ) : "").intdiv( $theTime, $day )." ".( intdiv( $theTime, $day ) > 1 ? "Tagen" : "Tag");
			$theTime -= $day * intdiv( $theTime, $day );
			$add = true;
		}
		if ( $theTime >= $hour ) {
			$timeText .= ( $add === true ? ( $theTime - $hour * intdiv( $theTime, $hour ) > 0 ? ", " : " und " ).intdiv( $theTime, $hour )." ".( intdiv( $theTime, $hour ) > 1 ? "Stunden" : "Stunde") : intdiv( $theTime, $hour )." ".( intdiv( $theTime, $hour ) > 1 ? "Stunden" : "Stunde") );
			$theTime -= $hour * intdiv( $theTime, $hour );
			$add = true;
		}
		if ( $theTime >= $minute ) {
			$timeText .= ( $add === true ? ( $theTime - $minute * intdiv( $theTime, $minute ) > 0 ? ", " : " und " ).intdiv( $theTime, $minute )." ".( intdiv( $theTime, $minute ) > 1 ? "Minuten" : "Minute") : intdiv( $theTime, $minute )." ".( intdiv( $theTime, $minute ) > 1 ? "Minuten" : "Minute") );
			$theTime -= $minute * intdiv( $theTime, $minute );
			$add = true;
		}
		if ( $theTime >= 1 ) 
			$timeText .= ($add === true ? " und " : "" ).$theTime.( intdiv( $theTime, 1 ) > 1 ? " Sekunden" : " Sekunde");
		return( $timeText );
	}

So ergibt sich aus:

MakeTimeDiffString( 0 ) „jetzt“
MakeTimeDiffString( -1 ) „vor 1 Sekunde“
MakeTimeDiffString( 604800*2+86400*3+60+1 ) „in 2 Wochen, 3 Tagen, 1 Minute und 1 Sekunde“
MakeTimeDiffString( -( 604800+125 ) ) „vor 1 Woche, 2 Minuten und 5 Sekunden“
MakeTimeDiffString( 604800+86400*2+7200+120+1 ) „in 1 Woche, 2 Tagen, 2 Stunden, 2 Minuten und 1 Sekunde“ 
und aus 
'Der Beginn der Unix-Epoche (Januar 1 1970 00:00:00 GMT) ist '.MakeTimeDiffString( 0 - time() ).' gewesen' 
„Der Beginn der Unix-Epoche (Januar 1 1970 00:00:00 GMT) ist vor 2828 Wochen, 14 Stunden, 40 Minuten und 38 Sekunden gewesen.“

Viel Spaß damit

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert