/** * Fetch the time ago as a language dependant sentence. * * @return string String containing a sentence like 'x minutes ago' * @param int $timestamp Timestamp you want to make a sentence of. * @param string[optional] $language Language to use, check SpoonLocale::getAvailableLanguages(). * @param string[optional] $format The format to return if the time passed is greather then a week. */ public static function getTimeAgo($timestamp, $language = 'en', $format = null) { // init vars $timestamp = (int) $timestamp; $language = SpoonFilter::getValue($language, SpoonLocale::getAvailableLanguages(), 'en', 'string'); $locale = array(); // fetch language if (!isset(self::$locales[$language])) { require 'spoon/locale/data/' . $language . '.php'; self::$locales[$language] = $locale; } $locale = self::$locales[$language]; // get seconds between given timestamp and current timestamp $secondsBetween = time() - $timestamp; // calculate years ago $yearsAgo = floor($secondsBetween / (365.242199 * 24 * 60 * 60)); if ($yearsAgo > 1 && $format === null) { return sprintf($locale['time']['YearsAgo'], $yearsAgo); } if ($yearsAgo == 1 && $format === null) { return $locale['time']['YearAgo']; } if ($yearsAgo >= 1 && $format !== null) { return self::getDate($format, $timestamp, $language); } // calculate months ago $monthsAgo = floor($secondsBetween / (365.242199 / 12 * 24 * 60 * 60)); if ($monthsAgo > 1 && $format === null) { return sprintf($locale['time']['MonthsAgo'], $monthsAgo); } if ($monthsAgo == 1 && $format === null) { return $locale['time']['MonthAgo']; } if ($monthsAgo >= 1 && $format !== null) { return self::getDate($format, $timestamp, $language); } // calculate weeks ago $weeksAgo = floor($secondsBetween / (7 * 24 * 60 * 60)); if ($weeksAgo > 1 && $format === null) { return sprintf($locale['time']['WeeksAgo'], $weeksAgo); } if ($weeksAgo == 1 && $format === null) { return $locale['time']['WeekAgo']; } if ($weeksAgo >= 1 && $format !== null) { return self::getDate($format, $timestamp, $language); } // calculate days ago $daysAgo = floor($secondsBetween / (24 * 60 * 60)); if ($daysAgo > 1) { return sprintf($locale['time']['DaysAgo'], $daysAgo); } if ($daysAgo == 1) { return $locale['time']['DayAgo']; } // calculate hours ago $hoursAgo = floor($secondsBetween / (60 * 60)); if ($hoursAgo > 1) { return sprintf($locale['time']['HoursAgo'], $hoursAgo); } if ($hoursAgo == 1) { return $locale['time']['HourAgo']; } // calculate minutes ago $minutesAgo = floor($secondsBetween / 60); if ($minutesAgo > 1) { return sprintf($locale['time']['MinutesAgo'], $minutesAgo); } if ($minutesAgo == 1) { return $locale['time']['MinuteAgo']; } // calculate seconds ago $secondsAgo = floor($secondsBetween); if ($secondsAgo > 1) { return sprintf($locale['time']['SecondsAgo'], $secondsAgo); } if ($secondsAgo <= 1) { return $locale['time']['SecondAgo']; } }
public function testGetAvailableLanguages() { $this->assertEquals(array('de', 'en', 'es', 'fr', 'nl'), SpoonLocale::getAvailableLanguages()); }