Счётчик обратного отчёта
Если на сайте анонсируется какая-либо акция, то сайт значительно выигрывает, если на нём есть блок, показывающий, сколько времени осталось до её начала - счётчик обратного отсчёта. Также счётчик обратного отсчёта может показывать, сколько времени осталось до окончания акции, если акция уже действует.
Разберём пример, когда на сайте организуются конкурсы с участием посетителей сайта. У каждого конкурса в админке устанавливается дата окончания. Счётчик обратного отсчёта должен показывать, сколько дней, часов и минут осталось до окончания.
1. Сначала позаботимся о правильном склонения слов перед числами. Например, если оставшееся время - 45 дней и т.д., то счётчик на сайте и должен выдавать именно "дней", а не "дня" или "день". А если остался 21 день и т.д., то нужно писать именно "день". То же самое с часами и минутами. За это отвечает пользовательская функция correctForm. Её код приведён ниже.
Код PHP
//функция склонения слов перед числами
function correctForm($number, $suffix) {
$keys = array(2, 0, 1, 1, 1, 2);
$mod = $number % 100;
$suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)];
return $suffix[$suffix_key];
}
2. Далее нам нужно получить дату окончания конкурса, отображаемого на текущей странице. Для этого пишем запрос к базе данных, где end_ - дата в формате числа и времени. Присваиваем её значение переменной $real_end. Затем получаем текущую дату и время функцией PHP date.
Код PHP
$resultT=mysql_query("select end_ FROM competitions WHERE cid='$cid'") or die (mysql_error());
$myrowT=mysql_fetch_array($resultT);
$real_end=$myrowT[end_];
$dat=date("Y-m-d, H:i:s");
3. И, собственно, сам счётчик обратного отсчёта. Два раза используем функцию PHP strtotime, которая преобразует текстовое представление даты на английском языке в метку времени Unix для текущей даты и даты окончания конкурса. Получаем разницу в секундах между датой окончания и текущей датой. Далее, используя функцию PHP floor, возвращающую ближайшее меньшее целое, вычисляем оставшиеся дни, часы и минуты. Вычисления основаны на том, что в минуте 60 секунд, в 1 часе 3600 секунд, в 1 дне 86400 секунд.
Код PHP
//вычисление оставшихся дней, часов и минут
$now_date = strtotime($dat);
$future_date = strtotime($real_end);
$difference_days = $future_date - $now_date;
$days = floor($difference_days/86400);
$difference_hours = $difference_days % 86400;
$hours = floor($difference_hours/3600);
$difference_min = $difference_hours % 3600;
$min = floor($difference_min/60);
4. Теперь применяем пользовательскую функцию correctForm склонения слов перед числами.
Код PHP
$array1 = array("день", "дня", "дней");
$word1 = correctForm($days, $array1);
$array2 = array("час", "часа", "часов");
$word2 = correctForm($hours, $array2);
$array3 = array("минута", "минуты", "минут");
$word3 = correctForm($min, $array3);
printf('<div class="time"><h1>%s %s %s %s %s %s</h1>до закрытия конкурса</div>', $days,$word1,$hours,$word2,$min,$word3);
5. И, наконец, полный код блока, реализующего счётчик обратного отсчёта. Как в случае с конкурсами, он точно так же может производит обратный отсчёт для акций на те или иные товары на сайте-каталоге или любой другой отсчёт времени, оставшегося до какого-либо "часа Ч".
Код PHP
//функция склонения слов перед числами
function correctForm($number, $suffix) {
$keys = array(2, 0, 1, 1, 1, 2);
$mod = $number % 100;
$suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)];
return $suffix[$suffix_key];
}
$resultT=mysql_query("select end_ FROM competitions WHERE cid='$cid'") or die (mysql_error());
$myrowT=mysql_fetch_array($resultT);
$real_end=$myrowT[end_];
$dat=date("Y-m-d, H:i:s");
//вычисление оставшихся дней, часов и минут
$now_date = strtotime($dat);
$future_date = strtotime($real_end);
$difference_days = $future_date - $now_date;
$days = floor($difference_days/86400);
$difference_hours = $difference_days % 86400;
$hours = floor($difference_hours/3600);
$difference_min = $difference_hours % 3600;
$min = floor($difference_min/60);
$array1 = array("день", "дня", "дней");
$word1 = correctForm($days, $array1);
$array2 = array("час", "часа", "часов");
$word2 = correctForm($hours, $array2);
$array3 = array("минута", "минуты", "минут");
$word3 = correctForm($min, $array3);
printf('<div class="time"><h1>%s %s %s %s %s %s</h1>до закрытия конкурса</div>', $days,$word1,$hours,$word2,$min,$word3);
Поделиться с друзьями