/** * Returns the difference between this date and the given $date * * It will always round to the biggest period, so 8 days ago will result in 1 week ago * while 13 days ago will result in 2 weeks ago. * * @param \Zend_Date $date * @param \Zend_Translate $translate * @return string */ public function diffReadable(\Zend_Date $date, \Zend_Translate $translate) { $difference = $date->getUnixTimeStamp() - $this->getUnixTimestamp(); //second, minute, hour, day, week, month, year, decade $lengths = array("60", "60", "24", "7", "4.34", "12", "10"); if ($difference > 0) { // this was in the past $ending = $translate->_("%s ago"); } else { // this was in the future $difference = -$difference; $ending = $translate->_("%s to go"); } for ($j = 0; $j < 7 && $difference >= $lengths[$j]; $j++) { $difference /= $lengths[$j]; } $difference = round($difference); switch ($j) { case 0: $period = $translate->plural('second', 'seconds', $difference); break; case 1: $period = $translate->plural('minute', 'minutes', $difference); break; case 2: $period = $translate->plural('hour', 'hours', $difference); break; case 3: $period = $translate->plural('day', 'days', $difference); break; case 4: $period = $translate->plural('week', 'weeks', $difference); break; case 5: $period = $translate->plural('month', 'months', $difference); break; case 6: $period = $translate->plural('year', 'years', $difference); break; case 7: $period = $translate->plural('decade', 'decades', $difference); break; default: break; } $time = "{$difference} {$period}"; $text = sprintf($ending, $time); return $text; }