All pastes #1350863 Raw Edit

DateHelper

public php v1 · immutable
#1350863 ·published 2009-03-02 09:56 UTC
rendered paste body
<?phpfunction format_daterange($start_date, $end_date, $format = 'd', $full_text, $start_text, $end_text, $culture = null, $charset = null){  if ($start_date != '' && $end_date != '')  {    return sprintf($full_text, format_date($start_date, $format, $culture, $charset), format_date($end_date, $format, $culture, $charset));  }  else if ($start_date != '')  {    return sprintf($start_text, format_date($start_date, $format, $culture, $charset));  }  else if ($end_date != '')  {    return sprintf($end_text, format_date($end_date, $format, $culture, $charset));  }}function format_date($date, $format = 'd', $culture = null, $charset = null){  static $dateFormats = array();  if (is_null($date))  {    return null;  }  if (!$culture)  {    $culture = sfContext::getInstance()->getUser()->getCulture();  }  if (!$charset)  {    $charset = sfConfig::get('sf_charset');  }  if (!isset($dateFormats[$culture]))  {    $dateFormats[$culture] = new sfDateFormat($culture);  }  return $dateFormats[$culture]->format($date, $format, null, $charset);}function format_datetime($date, $format = 'F', $culture = null, $charset = null){  return format_date($date, $format, $culture, $charset);}function distance_of_time_in_words($from_time, $to_time = null, $include_seconds = false){  $to_time = $to_time? $to_time: time();  $distance_in_minutes = floor(abs($to_time - $from_time) / 60);  $distance_in_seconds = floor(abs($to_time - $from_time));  $string = '';  $parameters = array();  if ($distance_in_minutes <= 1)  {    if (!$include_seconds)    {      $string = $distance_in_minutes == 0 ? 'меньше минуты' : '1 минута';    }    else    {      if ($distance_in_seconds <= 5)      {        $string = 'меньше 5 секунд';      }      else if ($distance_in_seconds >= 6 && $distance_in_seconds <= 10)      {        $string = 'меньше 10 секунд';      }      else if ($distance_in_seconds >= 11 && $distance_in_seconds <= 20)      {        $string = 'меньше 20 секунд';      }      else if ($distance_in_seconds >= 21 && $distance_in_seconds <= 40)      {        $string = 'полминуты';      }      else if ($distance_in_seconds >= 41 && $distance_in_seconds <= 59)      {        $string = 'меньше минуты';      }      else      {        $string = '1 минуту';      }    }  }  else if ($distance_in_minutes >= 2 && $distance_in_minutes <= 44)  {    $string = '%minutes% минут';    $parameters['%minutes%'] = $distance_in_minutes;        if (($parameters['%minutes%'] % 10) == 1)      $string = '%minutes% минуту';    else if (($parameters['%minutes%'] % 10) > 1 && ($parameters['%minutes%'] % 10) < 5)      $string = '%minutes% минуты';    else      $string = '%minutes% минут';  }  else if ($distance_in_minutes >= 45 && $distance_in_minutes <= 89)  {    $string = 'около часа';  }  else if ($distance_in_minutes >= 90 && $distance_in_minutes <= 1439)  {    $string = 'около %hours% часов';    $parameters['%hours%'] = round($distance_in_minutes / 60);  }  else if ($distance_in_minutes >= 1440 && $distance_in_minutes <= 2879)  {    $string = '1 день';  }# [0]нет ответов|# {n: n % 10 = 1}%count% ответ|# {n: n % 10 > 1 && n % 10 < 5}%count% ответа|# (1,Inf+]%count% ответов'  else if ($distance_in_minutes >= 2880 && $distance_in_minutes <= 43199)  {    $string = '%days% дней';    $parameters['%days%'] = round($distance_in_minutes / 1440);        if (($parameters['%days%'] % 10) == 1)      $string = '%days% день';    else if (($parameters['%days%'] % 10) > 1 && ($parameters['%days%'] % 10) < 5)      $string = '%days% дня';    else      $string = '%days% дней';  }  else if ($distance_in_minutes >= 43200 && $distance_in_minutes <= 86399)  {    $string = 'около месяца';  }  else if ($distance_in_minutes >= 86400 && $distance_in_minutes <= 525959)  {    $string = '%months% месяцев';    $parameters['%months%'] = round($distance_in_minutes / 43200);        if (($parameters['%months%'] % 10) == 1)      $string = '%months% месяц';    else if (($parameters['%months%'] % 10) > 1 && ($parameters['%months%'] % 10) < 5)      $string = '%months% месяца';    else      $string = '%months% месяцев';  }  else if ($distance_in_minutes >= 525960 && $distance_in_minutes <= 1051919)  {    $string = 'около года';  }  else  {    $string = 'больше %years% лет';    $parameters['%years%'] = floor($distance_in_minutes / 525960);        if (($parameters['%years%'] % 10) == 1)      $string = '%years% год';    else if (($parameters['%years%'] % 10) > 1 && ($parameters['%years%'] % 10) < 5)      $string = '%days% года';    else      $string = '%years% лет';  }  if (sfConfig::get('sf_i18n'))  {    use_helper('I18N');    return __($string, $parameters);  }  else  {    return strtr($string, $parameters);  }}// Like distance_of_time_in_words, but where to_time is fixed to time()function time_ago_in_words($from_time, $include_seconds = false){  return distance_of_time_in_words($from_time, time(), $include_seconds);}?>