Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для Staz Lincord
13 / 12 / 8
Регистрация: 04.12.2013
Сообщений: 323

Функции обратного отсчета времени

06.03.2016, 12:09. Показов 1559. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прошу помочь с этими функциями:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function downcounter($date) {
    $check_time = strtotime($date) - time()-60*60*2; //ОТНЯЛ 2 ЧАСА ДЛЯ ПОЛУЧЕНИИ МСК
    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;
}
 
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);
}
Проблема со временем. Если я сделаю отсчет больше 20 дней то один час минусуется(исчезает). Вот пример:

PHP
1
2
3
4
//Сейчас время 2016-03-06 12:00:00
echo downcounter('2016-04-05 12:00:00'); //Выводит 29 дней 23 часа (Но должно 30 дней быть)
echo '<br>';
echo downcounter('2016-03-16 12:00:00');//Выводит 10 дней (здесь правильно)
Прошу помощи мои собратья!!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.03.2016, 12:09
Ответы с готовыми решениями:

Картинка обратного отсчета времени
Суть заключается в следующем,хочу отослать html почту в которой будет обратный отсчет времени,но почтовик не разрешает выполнение java...

Таймер обратного отсчета с редактированием времени
Здравствуйте, пробую написать код таймера на ХТМЛ и ПХП, что бы таймер допустим шел от 3 дней 12 часов и 17 сек до нуля. Но пока он...

Таймер обратного отсчета с добавлением времени когда угодно
Здарвствуйте, пробую написать код таймера на ХТМЛ и ПХП, что бы таймер допустим шел от 3 дней 12 часов и 17 сек до нуля. Но пока он...

4
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
06.03.2016, 12:17
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
var int1 = parseInt(document.getElementById("int1").innerHTML);
    var int2 = parseInt(document.getElementById("int2").innerHTML);
 
    document.getElementById('timer_inp2').innerHTML = int1 - int2;
function timer() {
  var obj=document.getElementById('timer_inp2'); 
  obj.innerHTML--;  
  
  if(obj.innerHTML > 0) {
    
    // Если больше дня
    if(obj.innerHTML >= (24*60*60)) {
      
      var d = Math.floor(obj.innerHTML / (24*60*60));
      var h = Math.floor(obj.innerHTML % (24*60*60));
            var m = Math.floor(obj.innerHTML % (60*60) / 60);
      
      if(h >= 3600) {
        var h = Math.floor(h / 3600);
                //var m = Math.floor(h % 3600);
                var s = Math.floor(obj.innerHTML % 60);
      }
      else if(h >= 60) {
                var s = Math.floor(obj.innerHTML % 60);
        var m = Math.floor(h / 60);
        var h = 0;
      }
      else {
        //var s = h;
        var h = 0;
        var m = 0;
                var s = Math.floor(obj.innerHTML % 60);
      }
    }
    // Если больше часа
    else if(obj.innerHTML >= 3600) {
      
      var h = Math.floor(obj.innerHTML / 3600);
      var m = Math.floor(obj.innerHTML % 3600);
      
      if(m >= 60) {
                var s = Math.floor(obj.innerHTML % 60);
        var m = Math.floor(m / 60);
      }
      else {
                var s = Math.floor(obj.innerHTML % 60);
        //var s = m;
        var m = 0;
      }
      
    }
    // Если больше минуты
    else if(obj.innerHTML >= 60) {
            var h = Math.floor(obj.innerHTML / 3600);
      var m = Math.floor(obj.innerHTML / 60);
      var s = Math.floor(obj.innerHTML % 60);
    }
    // Если меньше минуты
    else {
            var h = Math.floor(obj.innerHTML / 3600);
            var m = Math.floor(obj.innerHTML / 60);
      var s = Math.floor(obj.innerHTML % 60);
    }
    
    //var d = Math.floor(obj.innerHTML / (365 *24*60*60));
    var days = (d > 0) ? d+'д. ' : '';
    var hours = (h > 0) ? h+'' : '';
    var minutes = (m > 0) ? ':'+m : '';
    var seconds = (s > 0) ? ':'+s : '';
        if(d < 10) var days = '0'+d+'д. ';
        if(h < 10) var hours = '0'+h;
        if(m < 10) var minutes = ':'+'0'+m;
        if(s < 10) var seconds = ':'+'0'+s;
    
    document.getElementById('new_time').innerHTML = '<div>осталось: '+days+hours+minutes+seconds+'</div>';
    setTimeout(timer,1000);
  }
    if(obj.innerHTML == 0) {
      document.getElementById('new_time').innerHTML = '<div>осталось: --/--</div>';
            
    }
    
}
setTimeout(timer,1000);
PHP
1
2
3
4
5
echo '<div style="display:none" id="int1" class="green">'.$ttb.'</div><!--Дата окончания-->
            <div style="display:none" id="int2" class="green">'.$now.'</div><!--Дата начала-->
            <div style="display:none" id="timer_inp2" class="green"></div>
            <div id="new_time"></div>
            <script type="text/javascript" src="timer.js"></script><!--Обязательно в конце-->';
1
 Аватар для Staz Lincord
13 / 12 / 8
Регистрация: 04.12.2013
Сообщений: 323
06.03.2016, 13:07  [ТС]
Пифагор, а какой формат времени писать?
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
06.03.2016, 13:16
Ну, я ее доработал немного. Приходит метка времени через strtotime(Y m d H:i:s)

Добавлено через 1 минуту
Код JS - это файл timer.js

Добавлено через 1 минуту
Еще, если интересно:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*===========*Дата с месяцем по-русски*===========*/
function getDateRus($timestamp){
    $num_month = date('n', $timestamp);
    $monthes = array(
        1 => 'января', 2 => 'февраля', 3 => 'марта',
        4 => 'апреля', 5 => 'мая', 6 => 'июня', 
        7 => 'июля', 8 => 'августа',9 => 'сентября', 
        10 => 'октября', 11 => 'ноября', 
        12 => 'декабря'
    );
    $month = $monthes[$num_month];
    
    $ru_date = date('d', $timestamp).' '.$month.' '.date('Y, H:i:s', $timestamp);
    return $ru_date;
}
1
 Аватар для Staz Lincord
13 / 12 / 8
Регистрация: 04.12.2013
Сообщений: 323
06.03.2016, 13:42  [ТС]
Пифагор, не работает. Есть мысли на счет моей проблемы?

Добавлено через 1 минуту
Я не могу понять почему оно убирает один час если я делаю больше 20 дней. Может сдвиг во времени?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.03.2016, 13:42
Помогаю со студенческими работами здесь

Таймер обратного отсчета
Стоит такая задача есть несколько ссылок у которых необходимо задать разное время их показа к примеру у одно ссылке один раз через каждые...

Таймер обратного отсчета
У меня проблема, хочу создать таймер обратного отсчета, лично у меня все получилось, создаю таймер не по заданному таймингу, а через базу...

Таймер обратного отсчета на PHP
Здравствуйте, почитал различные темы на форуме, но ответа для своего случая так и не нашел. Отсюда вопросик: Есть дата наступления...

Таймер обратного отсчета с cookie
Ребята весь интернет перелопатил и ничего не нашёл. Последняя надежда на вас) Я хочу научиться реализовать таймер обратного отсчета на...

Таймер обратного отсчета минуты синхронизация с временем сервера
Добрый вечер! Нужен таймер обратного отсчета, который выводил бы в реал тайме сколько секунд осталось до завершения минуты, отталкиваясь от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru