PHP. Сколько дней/часов/минут/секунд осталось до указанного события.
К написанию этого поста меня натолкнул твит @Dimox_ru, которого я читаю. Он просил порекомендовать скрипт на PHP, который выводит, сколько осталось дней/часов/минут/секунд до указанной даты. Что же, на самом деле здесь нет ничего сложного, тем более я недавно делал подобный скрипт в одном из проектов.
Сразу приведу код скрипта, а потом немного поясню что и как:
/** * Счетчик обратного отсчета * * @param mixed $date * @return */ function downcounter($date){ $check_time = strtotime($date) - time(); if($check_time <= 0){ return false; } $days = floor($check_time/86400); $hours = floor(($check_time%86400)/3600); $minutes = floor(($check_time%3600)/60); $seconds = $check_time%60; $str = ''; if($days > 0) $str .= declension($days,array('день','дня','дней')).' '; if($hours > 0) $str .= declension($hours,array('час','часа','часов')).' '; if($minutes > 0) $str .= declension($minutes,array('минута','минуты','минут')).' '; if($seconds > 0) $str .= declension($seconds,array('секунда','секунды','секунд')); return $str; } /** * Функция склонения слов * * @param mixed $digit * @param mixed $expr * @param bool $onlyword * @return */ function declension($digit,$expr,$onlyword=false){ if(!is_array($expr)) $expr = array_filter(explode(' ', $expr)); if(empty($expr[2])) $expr[2]=$expr[1]; $i=preg_replace('/[^0-9]+/s','',$digit)%100; if($onlyword) $digit=''; if($i>=5 && $i<=20) $res=$digit.' '.$expr[2]; else { $i%=10; if($i==1) $res=$digit.' '.$expr[0]; elseif($i>=2 && $i<=4) $res=$digit.' '.$expr[1]; else $res=$digit.' '.$expr[2]; } return trim($res); }
Итак, у нас есть 2 функции:
- downcounter() – функция счетчика обратного отсчета
- declension() – вспомогательная функция, для склонения слов
Как работает функция downcounter()? Очень просто. На вход она принимает всего один параметр $date – это и есть дата Вашего события от которого необходимо вести отчет. Эта дата должна быть всегда больше текущей даты, иначе счетчик не запуститься ).
Дальше в скрипте я получаю разницу текущей даты и даты события. После чего высчитываю сколько осталось дней/часов/минут/секунд и формирую эти значения в строку.
Результат работы этих функций можно увидеть на демонстрационной странице.
Использовать эту функцию нужно так:
<?=downcounter('2013-12-31 23:59:59');?>
На этом все. Спасибо.
-
Комментарии (9)
- Сайт