Поиграть


Фотографии знаменитостей, Герои нашего времени

Сколько времени назад

Code (php)
  1.  
  2. <?
  3. /*******************************************************************
  4. Принимает: дату в формате Unix timestamp и двоичное значение режима $sharp.
  5.         $sharp принимает значения:
  6.          true - точный режим: будут выведены все интервалы времени, например:
  7.             22 года и 4 месяца и 2 недели и 6 дней и 18 часов и 29 минут и 58 секунд назад
  8.          
  9.          false - неточный режим: будут выведены  один или два ненулевых интервала:
  10.             22 года назад
  11.             2 месяца и 3 недели
  12. */
  13.  
  14. function om_ago($time,$sharp = false)
  15. {
  16.     if(!$time) return "никогда!";
  17.    
  18.     //Массив склонений для чисел от 0 до 5
  19.     $cases = array (2, 0, 1, 1, 1, 2);
  20.  
  21.     //Обозначения числительных для разных периодов года
  22.     $strings =array(   
  23.     array ("год", "года", "лет"),
  24.     array ("месяц","месяца", "месяцев"),
  25.     array ("неделя","недели", "недель"),
  26.     array ("день","дня", "дней"),
  27.     array ("час","часа", "часов"),
  28.     array ("минуту","минуты", "минут"),
  29.     array ("секунду","секунды", "секунд")
  30.     );
  31.  
  32.     //Количество секунд в  году, месяце,  неделе, дне,   часе, минуте, секунде
  33.     $seconds = array ( 31557600, 2629800, 604800, 86400, 3600, 60,     1      );
  34.    
  35.     //Число секунд между указанным и настоящим временем
  36.     $time = time() - $time;
  37.    
  38.     if($time==0) return "сейчас";
  39.  
  40.     //Определяем, в прошлом или в будущем лежит указанная дата
  41.     $past = $time>0;
  42.  
  43.     $time = abs($time);
  44.  
  45.     //Выходная строка
  46.     $out = "";
  47.  
  48.     //Число ненулевых интервалов времени
  49.     //При "неточном режиме" не превышает двух
  50.     $count = 0;
  51.    
  52.     //Для всех интервало времени
  53.     for($i=0;$i<count($seconds);$i++)
  54.     {
  55.         //Делим на количество секунд в текущем промежутке времени
  56.         //и получаем интервал между датами в соответствующих единицах
  57.         $interval = floor($time / $seconds[$i]);
  58.  
  59.         //Остаток от деления оставляем на следующий цикл
  60.         $time %= $seconds[$i];
  61.        
  62.         if($interval>0)
  63.         {
  64.             //Разделитель
  65.             $pref = ($count==0) ? "" : " и ";
  66.            
  67.             //Выбираем падеж и число для выбранного интервала
  68.             $string = $strings[$i][ ($interval%100>4 && $interval%100<20)? 2 : $cases[min($interval%10, 5)] ];
  69.  
  70.             //Составляем собственно строчку
  71.             $out .= "$pref$interval $string";
  72.            
  73.             $count++;
  74.            
  75.             //Если в "неточном режиме" интервал больше двух, то останавливаем цикл.
  76.             //Например, если прошло 3 года, то количество месяцев значения уже не имеет.
  77.             if($interval>2 && !$sharp) break;
  78.         }
  79.         else    //В "неточном режиме", если мы уже набрали один интервал и сделующий равен нулю, то останавливаем цикл.
  80.                 //Однако, если после месяца идёт 0 недель, то мы всё же напишем интервал в днях. т.е. 1 месяц и 4 дня.
  81.             if(!$sharp && $count>0 && $i!=2) break;
  82.  
  83.         //Если в "неточном режиме" мы уже набрали два интервала, то останавливаем цикл
  84.         if($count>1 && !$sharp) break;
  85.     }
  86.  
  87.     if($past)
  88.         $out .= " назад";   //3 часа назад
  89.     else
  90.         $out = "Ещё ".$out; //Ещё 2 года
  91.  
  92.     return $out;
  93.  
  94. }
  95. ?>
  96.  

+1+2+3+4+5 (1 голосов, в среднем: 5 из 5)
Загрузка... Загрузка...

Оставьте комментарий

Блог разработчика / Fuer den Bikerclub nebenan, bieten wir Motorrad Lederjacken an
Советую скачать скайп обычный прямо сейчас.
обслуживание ремонт компьютеров улица 1905 в москве
Want convenience? Try online grocery shopping at eFoodDepot.com