Php таймер отсчета времени

Таймер обратного счета на PHP

Доброго времени суток! Как Вы, наверное, уже знаете, я часто провожу распродажи моих видеокурсов. На странице распродажи есть таймер обратного счета на PHP, который информирует посетителей сколько времени осталось до окончания распродажи.И вот его примерную реализацию я Вам сегодня и покажу.

$endOfDiscount = mktime(23,59,0,3,26,2020); // дата окончания распродажи
$now = time(); // текущее время
$secondsRemaining = $endOfDiscount — $now; // оставшееся время

define(‘SECONDS_PER_MINUTE’, 60); // секунд в минуте
define(‘SECONDS_PER_HOUR’, 3600); // секунд в часу
define(‘SECONDS_PER_DAY’, 86400); // секунд в дне

$daysRemaining = floor($secondsRemaining / SECONDS_PER_DAY); //дни, до даты
$secondsRemaining -= ($daysRemaining * SECONDS_PER_DAY); //обновляем переменную

$hoursRemaining = floor($secondsRemaining / SECONDS_PER_HOUR); // часы до даты
$secondsRemaining -= ($hoursRemaining * SECONDS_PER_HOUR); //обновляем переменную

$minutesRemaining = floor($secondsRemaining / SECONDS_PER_MINUTE); //минуты до даты
$secondsRemaining -= ($minutesRemaining * SECONDS_PER_MINUTE); //обновляем переменную

echo(«

До окончания распродажи осталось $daysRemaining дней, $hoursRemaining часов, $minutesRemaining минут, $secondsRemaining секунда

«); //печатаем сообщение

Создано 24.03.2020 13:30:22

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 0 ):

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.

    Источник

    Примеры

    // Создаём и запускаем таймер, который сработает через 2 секунды, после чего будет срабатывать
    // раз в секунду, пока вы его вручную не остановите
    $w2 = new EvTimer ( 2 , 1 , function ( $w ) echo «вызывается раз в секунду, первое срабатывание через 2 секунды\n» ;
    echo «итерация color: #007700″>, Ev :: iteration (), PHP_EOL ;

    // Останавливаем наблюдателя через 5 итераций
    Ev :: iteration () == 5 and $w -> stop ();
    // Остановливаем наблюдателя, если следующий вызов приведёт к десятой (или больше) итерации
    Ev :: iteration () >= 10 and $w -> stop ();
    >);

    // Создаём остановленный таймер. Он будет неактивен, пока мы его не запустим
    $w_stopped = EvTimer :: createStopped ( 10 , 5 , function( $w ) echo «Callback-функция таймера, созданного остановленным\n» ;

    // Останавливаем наблюдателя через 2 итерации
    Ev :: iteration () >= 2 and $w -> stop ();
    >);

    // Запускаем событийный цикл, пока работает хотя бы один наблюдатель или пока не вызван Ev::stop()
    Ev :: run ();

    // Запускаем и смотрим, как он работает
    $w_stopped -> start ();
    echo «Запускаем одну итерацию\n» ;
    Ev :: run ( Ev :: RUN_ONCE );

    echo «Перезапускаем второго наблюдателя и пытаемся отловить те же события, но не блокируем\n» ;
    $w2 -> again ();
    Ev :: run ( Ev :: RUN_NOWAIT );

    $w = new EvTimer ( 10 , 0 , function() <>);
    echo «Запускаем блокирующий цикл\n» ;
    Ev :: run ();
    echo «END\n» ;
    ?>

    Результатом выполнения данного примера будет что-то подобное:

    2 секунды прошло вызывается раз в секунду, первое срабатывание через 2 секунды итерация = 1 вызывается раз в секунду, первое срабатывание через 2 секунды итерация = 2 вызывается раз в секунду, первое срабатывание через 2 секунды итерация = 3 вызывается раз в секунду, первое срабатывание через 2 секунды итерация = 4 вызывается раз в секунду, первое срабатывание через 2 секунды итерация = 5 Запускаем одну итерацию Функция обратного вызова таймера, созданного остановленным Перезапускаем второго наблюдателя и пытаемся отловить те же события, но не блокируем Запускаем блокирующий цикл вызывается раз в секунду, первое срабатывание через 2 секунды итерация = 8 вызывается раз в секунду, первое срабатывание через 2 секунды итерация = 9 вызывается раз в секунду, первое срабатывание через 2 секунды итерация = 10 END

    Пример #2 Периодический таймер. Срабатывает раз в 10.5 секунд

    $w = new EvPeriodic ( 0. , 10.5 , NULL , function ( $w , $revents ) echo time (), PHP_EOL ;
    >);

    Пример #3 Периодический таймер. Использование callback-функции для перезадания интервала

    // Срабатывает раз в 10.5 секунд

    function reschedule_cb ( $watcher , $now ) return $now + ( 10.5 . — fmod ( $now , 10.5 ));
    >

    $w = new EvPeriodic ( 0. , 0. , «reschedule_cb» , function ( $w , $revents ) echo time (), PHP_EOL ;
    >);

    Пример #4 Периодический таймер. Срабатывает каждые 10.5 секунд, начиная с текущего момента

    // Срабатывает раз в 10.5 секунд начиная с текущего момента
    $w = new EvPeriodic ( fmod ( Ev :: now (), 10.5 ), 10.5 , NULL , function ( $w , $revents ) echo time (), PHP_EOL ;
    >);

    Пример #5 Ждём, пока STDIN не станет читаемым

    // Ждём, пока STDIN не станет читаемым
    $w = new EvIo ( STDIN , Ev :: READ , function ( $watcher , $revents ) echo «STDIN is readable\n» ;
    >);

    Пример #6 Используем асинхронный ввод/вывод для доступа к сокету

    /* Используем асинхронный ввод/вывод для доступа к сокету */

    // Модуль `sockets’ продолжит логировать предупреждения
    // для EINPROGRESS, EAGAIN/EWOULDBLOCK etc.
    error_reporting ( E_ERROR );

    $e_nonblocking = array ( /*EAGAIN или EWOULDBLOCK*/ 11 , /*EINPROGRESS*/ 115 );

    // Получаем порт для сервиса WWW
    $service_port = getservbyname ( ‘www’ , ‘tcp’ );

    // Получаем IP-адрес целевого хоста
    $address = gethostbyname ( ‘google.co.uk’ );

    // Создаём сокет TCP/IP
    $socket = socket_create ( AF_INET , SOCK_STREAM , SOL_TCP );
    if ( $socket === FALSE ) echo «Ошибка при вызове socket_create(): причина: »
    . socket_strerror ( socket_last_error ()) . «\n» ;
    >

    // Устанавливаем флаг O_NONBLOCK
    socket_set_nonblock ( $socket );

    // Прерываем по превышению времени ожидания
    $timeout_watcher = new EvTimer ( 10.0 , 0. , function () use ( $socket ) socket_close ( $socket );
    Ev :: stop ( Ev :: BREAK_ALL );
    >);

    // Посылаем запрос HEAD когда сокет доступен для записи
    $write_watcher = new EvIo ( $socket , Ev :: WRITE , function ( $w )
    use ( $socket , $timeout_watcher , $e_nonblocking )
    // Останавливаем наблюдателя $timeout_watcher
    $timeout_watcher -> stop ();
    // Останавливаем наблюдателя $write_watcher
    $w -> stop ();

    $in = «HEAD / HTTP/1.1\r\n» ;
    $in .= «Host: google.co.uk\r\n» ;
    $in .= «Connection: Close\r\n\r\n» ;

    if (! socket_write ( $socket , $in , strlen ( $in ))) trigger_error ( «Ошибка записи $in в сокет» , E_USER_ERROR );
    >

    $read_watcher = new EvIo ( $socket , Ev :: READ , function ( $w , $re )
    use ( $socket , $e_nonblocking )
    // Сокет доступен для чтения. Читаем 20 байт в неблокирующем режиме
    $ret = socket_recv ( $socket , $out , 20 , MSG_DONTWAIT );

    if ( $ret ) echo $out ;
    > elseif ( $ret === 0 ) // Все прочтено
    $w -> stop ();
    socket_close ( $socket );
    return;
    >

    // Ловим EINPROGRESS, EAGAIN или EWOULDBLOCK
    if ( in_array ( socket_last_error (), $e_nonblocking )) return;
    >

    $w -> stop ();
    socket_close ( $socket );
    >);

    $result = socket_connect ( $socket , $address , $service_port );

    Результатом выполнения данного примера будет что-то подобное:

    HTTP/1.1 301 Moved Permanently Location: http://www.google.co.uk/ Content-Type: text/html; charset=UTF-8 Date: Sun, 23 Dec 2012 16:08:27 GMT Expires: Tue, 22 Jan 2013 16:08:27 GMT Cache-Control: public, max-age=2592000 Server: gws Content-Length: 221 X-XSS-Protection: 1; mode=block X-Frame-Options: SAMEORIGIN Connection: close

    Пример #7 Встраиваем один цикл в другой

    /*
    * Пытаемся получить встраиваемый цикл и встроить его в событийный цикл по умолчанию.
    * Если это невозможно — используем цикл по умолчанию. Цикл по умолчанию
    * хранится в $loop_hi, а встраиваемый в $loop_lo (который будет равен $loop_hi в случае
    * если мы не будем использовать встраиваемый цикл).
    *
    * Пример взят из
    * http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#Examples_CONTENT-9
    */
    $loop_hi = EvLoop :: defaultLoop ();
    $loop_lo = NULL ;
    $embed = NULL ;

    if ( $loop_lo ) $embed = new EvEmbed ( $loop_lo , function () <>);
    > else $loop_lo = $loop_hi ;
    >
    ?>

    Пример #8 Встраивание цикла, созданного с помощью kqueue в цикл по умолчанию

    /*
    * Проверяем, что бэкенд kqueue доступен, но не рекомендован, и создаём его для
    * работы с сокетами (которые обычно работают с любой реализацией kqueue).
    * Сохраняем событийный цикл kqueue/socket-only в loop_socket. (Можно опционально
    * использовать флаг EVFLAG_NOENV)
    *
    * Пример взят из
    * http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#Examples_CONTENT-9
    */
    $loop = EvLoop :: defaultLoop ();
    $socket_loop = NULL ;
    $embed = NULL ;

    if (! $socket_loop ) $socket_loop = $loop ;
    >

    // теперь используем $socket_loop для всех сокетов, а $loop для всего остального
    ?>

    Пример #9 Перехватываем сигнал SIGTERM

    $w = new EvSignal ( SIGTERM , function ( $watcher ) echo «Получен сигнал SIGTERM\n» ;
    $watcher -> stop ();
    >);

    Пример #10 Отслеживаем изменение /var/log/messages

    // Используем интервал опроса в 10 секунд
    $w = new EvStat ( «/var/log/messages» , 8 , function ( $w ) echo «/var/log/messages изменён\n» ;

    if ( $attr [ ‘nlink’ ]) printf ( «Текущий размер: %ld\n» , $attr [ ‘size’ ]);
    printf ( «Текущее значение atime: %ld\n» , $attr [ ‘atime’ ]);
    printf ( «Текущее значение mtime: %ld\n» , $attr [ ‘mtime’ ]);
    > else fprintf ( STDERR , «файл `messages` отсутствует!» );
    $w -> stop ();
    >
    >);

    Пример #11 Отслеживаем изменение /var/log/messages. Избегаем пропуска обновлений с помощью задержки в одну секунду

    $timer = EvTimer :: createStopped ( 0. , 1.02 , function ( $w ) $w -> stop ();

    // 1 секунду после последнего изменения файла
    printf ( «Текущий размер: %ld\n» , $stat -> attr ()[ ‘size’ ]);
    >);

    $stat = new EvStat ( «/var/log/messages» , 0. , function () use ( $timer ) // Сбрасываем наблюдателя $timer
    $timer -> again ();
    >);

    Пример #12 Отслеживаем изменения статуса процесса

    if ( $pid == — 1 ) fprintf ( STDERR , «pcntl_fork failed\n» );
    > elseif ( $pid ) $w = new EvChild ( $pid , FALSE , function ( $w , $revents ) $w -> stop ();

    printf ( «Процесс %d вышел с кодом %d\n» , $w -> rpid , $w -> rstatus );
    >);

    // Защита от зомби процессов
    pcntl_wait ( $status );
    > else // Порождённый потомок
    exit( 2 );
    >
    ?>

    Источник

    Обратный отсчет времени на PHP

    Обратный отсчет времени на PHP

    Всем большущий привет!
    Хочу предложить для вас небольшой скрипт на PHP, предназначенный для обратного отсчета времени. Этот скрипт позволяет выводить оставшиеся дни, часы, минуты и секунды. Как только таймер достигнет указанного времени, появится сообщение, которое вы напишите в скрипте, например, «с Новым Годом» или «акция закончилась».
    Скрипт очень удобно применять в случаях, если нужно к определенному времени отсчитывать время, например, к Новому Году, Рождеству, Дню рождения блога/сайта, время окончания акции, конкурса и т.п.

    Код скрипта для отсчета времени

    Скопируйте код PHP и вставьте на ваш сайт в то место, где вы хотите видеть вывод даты. Но скрипт должен быть размещен между тегами .

    switch(substr($days, -2)) < case 1: $d='день'; break; case 2: case 3: case 4: $d='дня'; break; default: $d='дней'; >switch(substr($hour, -2)) < case 1: $h='час'; break; case 2: case 3: case 4: $h='часа'; break; default: $h='часов'; >switch(substr($min, -2)) < case 1: $m='минута'; break; case 2: case 3: case 4: $m='минуты'; break; default:$m='минут'; >?> 0) echo ‘До нового года ‘.$o.’:
    ‘; ?> 0) echo $days.’ ‘.$d; ?>, 0) echo ‘ ‘.$hour.’ ‘.$h; ?> 0) echo ‘ и ‘.$min.’ ‘.$m; ?>

    Настройки скрипта.
    Строка (2) – указывает число, месяц, год окончания работы таймера.

    $date = strtotime(» 1 January 2014 «);

    Для тех, кто не знает месяца на английском, вот весь список:
    Январь – January
    Февраль – February
    Март – March
    Апрель – April
    Май – May
    Июнь – June
    Июль – July
    Август – August
    Сентябрь – September
    Октябрь – October
    Ноябрь – November
    Декабрь – December

    Строка (41) – напишите надпись, до чего осталось время. В данном примере написано так: «До Нового Года».

    0) echo ‘ До нового года  ‘.$o.’:
    ‘; ?>

    Строка (45) – напишите надпись, которая появится посетителям после остановки таймера.

    Если вы владеете HTML и CSS стилем, тогда можно придать выводимым цифрам таймера и тексту оригинальный вид.
    Это все!
    Спасибо вам, что вы являетесь постоянными посетителями блога BlogGood.ru

    Источник

    Читайте также:  Isp php не работает
    Оцените статью