note 78677 added to function.time

From: Date: Mon, 22 Oct 2007 23:31:31 +0000
Subject: note 78677 added to function.time
Groups: php.notes 
Request: Send a blank email to php-notes+get-131650@lists.php.net to get a copy of this message
My modification and enhancements to the timeDiff() function last updated by sean sullivan. The rewrite was done to add a couple new optional parameters but I also got a bump in performance. On a completely personal preference level I changed the month and year second values with ones I got from Google searches. Written and tested with 5.2.0. Options include to = time(); date to compute the range to parts = 1; number of parts to display max precision = 'second'; lowest part to compute to distance = TRUE; include the 'ago' or 'away' bit separator = ', '; separates the parts <?php function timeDiff($time, $opt = array()) { // The default values $defOptions = array( 'to' => 0, 'parts' => 1, 'precision' => 'second', 'distance' => TRUE, 'separator' => ', ' ); $opt = array_merge($defOptions, $opt); // Default to current time if no to point is given (!$opt['to']) && ($opt['to'] = time()); // Init an empty string $str = ''; // To or From computation $diff = ($opt['to'] > $time) ? $opt['to']-$time : $time-$opt['to']; // An array of label => periods of seconds; $periods = array( 'decade' => 315569260, 'year' => 31556926, 'month' => 2629744, 'week' => 604800, 'day' => 86400, 'hour' => 3600, 'minute' => 60, 'second' => 1 ); // Round to precision if ($opt['precision'] != 'second') $diff = round(($diff/$periods[$opt['precision']])) * $periods[$opt['precision']]; // Report the value is 'less than 1 ' precision period away (0 == $diff) && ($str = 'less than 1 '.$opt['precision']); // Loop over each period foreach ($periods as $label => $value) { // Stitch together the time difference string (($x=floor($diff/$value))&&$opt['parts']--) && $str.=($str?$opt['separator']:'').($x.' '.$label.($x>1?'s':'')); // Stop processing if no more parts are going to be reported. if ($opt['parts'] == 0 || $label == $opt['precision']) break; // Get ready for the next pass $diff -= $x*$value; } $opt['distance'] && $str.=($str&&$opt['to']>$time)?' ago':' away'; return $str; } ?> Usage: $span = timeDiff($when); or $span = timeDiff($when, array('parts' => 3)); ---- Server IP: 69.147.83.197 Probable Submitter: 66.193.249.107 ---- Manual Page -- http://www.php.net/manual/en/function.time.php Edit -- https://master.php.net/note/edit/78677 Del: integrated -- https://master.php.net/note/delete/78677/integrated Del: useless -- https://master.php.net/note/delete/78677/useless Del: bad code -- https://master.php.net/note/delete/78677/bad+code Del: spam -- https://master.php.net/note/delete/78677/spam Del: non-english -- https://master.php.net/note/delete/78677/non-english Del: in docs -- https://master.php.net/note/delete/78677/in+docs Del: other reasons-- https://master.php.net/note/delete/78677 Reject -- https://master.php.net/note/reject/78677 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#131650) next »