Example #1
0
 /**
  * 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;
 }