## Posted By

browncardigan on 02/25/10

## Who likes this?

1 person have marked this snippet as a favorite

# getTimeDiff

/ Published in: PHP

`function getTimeDiff(\$timestamp=false, \$loop=false) { 	\$current_time = time(); 	if (\$timestamp) {   		// Determine the difference, between the time now and the timestamp		\$difference = \$current_time - \$timestamp;    		// Set the periods of time  		\$periods = array("second", "minute", "hour", "day", "week", "month", "year", "decade");		\$lengths = array(1, 60, 3600, 86400, 604800, 2630880, 31570560, 315705600);    		// Determine which period we should use, based on the number of seconds lapsed.   		// If the difference divided by the seconds is more than 1, we use that.		// Eg 1 year / 1 decade = 0.1, so we move on  	 	// Go from decades backwards to seconds          		for (\$val = sizeof(\$lengths) - 1; (\$val >= 0) && ((\$number = \$difference / \$lengths[\$val]) <= 1); \$val--);    		// Ensure the script has found a match   		if (\$val < 0) \$val = 0;    		// Determine the minor value, to recurse through   		\$new_time = \$current_time - (\$difference % \$lengths[\$val]);    		// Set the current value to be floored   		\$number = floor(\$number);    		// If required create a plural   		if(\$number != 1) \$periods[\$val].= "s";    		// Return text   		\$text = sprintf("%d %s ", \$number, \$periods[\$val]);       		// Ensure there is still something to recurse through, and we have not found 1 minute and 0 seconds.		// note: 'the loop' is turned off - it will only show the highest   		if (\$loop && (\$val >= 1) && ((\$current_time - \$new_time) > 0)){       			\$text .= getTimeDiff(\$new_time);		}    		return \$text;	}}`