Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: базы данных
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Bakhrmoff
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 48
#1

Вывод отсчета времени (ограничение срока действия контента)

12.02.2014, 23:53. Просмотров 1726. Ответов 33
Метки нет (Все метки)

Привет,всем гуру программирования) Хелп ми. Трабл заключается в следующем, есть сайт где пользователи могут загрузить свой баннер, баннер загружается на 2 дня,хочу сделать такую фичу чтобы после загрузки баннера под ним появлялась надпись мол "Место для Вашей рекламы освободится через столько то" и обратный отсчет в реальном времени,как лучше всего это организовать? брать данные из БД или лучше повесить какой нибудь обработчик на JS чтобы при загрузке срабатывал отсчет обратного времени. Спасибо за внимание)

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2014, 23:53
Ответы с готовыми решениями:

Постраничный вывод контента
Всем привет! как реализовать постраничный вывод контента? <?php ...

Запись времени действия одного и второго значения из переменной
Как средствами PHP можно записать время действия переменной? Есть переменная...

Вывод контента в нужном месте
При попадание на главную страницу выполняю проверку залогинен ли юзер. Если да,...

Вывод одного контента несколько раз
Изначально человеку дается форма(input), после ее заполнения, он может выбрать...

Вывод контента из БД без перезагрузки страницы
Всем привет. Четвёртый день мучаюсь но что-то как-то не идёт дело. Моделирую...

33
DrobyshevAlex
1172 / 1122 / 94
Регистрация: 31.05.2012
Сообщений: 3,059
13.02.2014, 00:33 #2
ну уж точно не тащить каждую секунду данные с бд, да и зачем?
1
Bakhrmoff
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 48
13.02.2014, 00:46  [ТС] #3
DrobyshevAlex, подскажите,пожалуйста,альтернативное решение
0
DrobyshevAlex
1172 / 1122 / 94
Регистрация: 31.05.2012
Сообщений: 3,059
13.02.2014, 00:48 #4
Так Вы же сами написали его.
Цитата Сообщение от Bakhrmoff Посмотреть сообщение
повесить какой нибудь обработчик на JS чтобы при загрузке срабатывал отсчет обратного времени
при открытии страницы просто время в жс запоминаете, когда срок заканчивается, и дальше каждую секунду выводите оставшееся время.
или просто время оставшиеся сразу запоминаете и каждую секунду уменьшаете.
если страница будет открыта часами, то лучше конечно первый вариант.
1
Bakhrmoff
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 48
13.02.2014, 00:59  [ТС] #5
DrobyshevAlex, Если бы еще помогли с кодированием было бы здорово,сам я в этом не силен,смог только вывести данные когда баннер будет удален в формате ГГГГ-ММ-ЧЧ ЧЧ-ММ-СС

PHP
1
2
3
4
5
6
7
8
mysql_connect('имя хоста','имя юзера','пароль');
mysql_select_db('имя БД');
$res = mysql_query("SELECT * FROM `table_name`") or die(mysql_error());
echo '<table>';
while($row = mysql_fetch_assoc($res)) {
echo '<tr><td>'.$row['первое_поле'].'</td><td>'.$row['второе_поле'].'</td>....</tr>';
}
echo '</table>';
0
DrobyshevAlex
1172 / 1122 / 94
Регистрация: 31.05.2012
Сообщений: 3,059
13.02.2014, 01:26 #6
Я не спец по жс
как то так
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
<?php
 
$date = '2014-02-20 00:00:00';
 
?>
 
<div id="banner-counter-1" data-to="<?php echo $date ?>"></div>
<script>
 
var banner = document.getElementById('banner-counter-1')
if (banner) {
    var to = new Date(banner.getAttribute('data-to'))
    setInterval(function(){
        var diff = Math.floor((to - new Date().getTime()) / 1000)
        var s = diff % 60
        diff = Math.floor(diff / 60)
        var m = diff % 60
        diff = Math.floor(diff / 60)
        var h = diff % 24
        var d = Math.floor(diff / 24)
        banner.innerHTML = d + ' дней ' + h + ' часов ' + m + ' минут ' + s + ' секунд'
    }, 1000)
}
 
</script>
1
Bakhrmoff
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 48
13.02.2014, 01:37  [ТС] #7
DrobyshevAlex, оно теперь время отсчитывает от 20 февраля)) нужно чтобы отсчитывало от даты окончания
вот что я нахимичил,помогите подправить

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
$res = mysql_query("SELECT * FROM `rvorh_br`") or die(mysql_error());
echo '<table>';
while($row = mysql_fetch_assoc($res)) {
echo '<tr><td>'.$row['date_free'].'</td>Место для Вашей рекламы освободится:</tr>';
}
echo '</table>';
?><br><br>
<?php
 
$row = '0000-00-00 00:00:00';
 
?>
 
<div id="banner-counter-1" data-to="<?php echo $row ?>"></div>
<script>
 
var banner = document.getElementById('banner-counter-1')
if (banner) {
    var to = new Date(banner.getAttribute('data-to'))
    setInterval(function(){
        var diff = Math.floor((to - new Date().getTime()) / 1000)
        var s = diff % 60
        diff = Math.floor(diff / 60)
        var m = diff % 60
        diff = Math.floor(diff / 60)
        var h = diff % 24
        var d = Math.floor(diff / 24)
        banner.innerHTML = d + ' дней ' + h + ' часов ' + m + ' минут ' + s + ' секунд'
    }, 1000)
}
 
</script>
0
DrobyshevAlex
1172 / 1122 / 94
Регистрация: 31.05.2012
Сообщений: 3,059
13.02.2014, 02:03 #8
Цитата Сообщение от Bakhrmoff Посмотреть сообщение
оно теперь время отсчитывает от 20 февраля))
понятное дело, так как в коде 20 февраля

Вы же написали
Цитата Сообщение от Bakhrmoff Посмотреть сообщение
смог только вывести данные когда баннер будет удален в формате ГГГГ-ММ-ЧЧ ЧЧ-ММ-СС
вот и выведите их вместо 20го февраля, просто переменной $date присвойте данные из бд, ну или $row

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
<?php
 
/*
$banners = array(
    array('date_free' => '2014-02-15 00:00:00'),
    array('date_free' => '2014-02-20 00:00:00'),
    array('date_free' => '2014-02-25 00:00:00'),
);
*/
 
$res = mysql_query("SELECT * FROM `rvorh_br`") or die(mysql_error());
$banners = array();
while($row = mysql_fetch_assoc($res))
    $banners[] = $row;
 
 
?>
 
<table id="banners">
<?php foreach ($banners as $banner) : ?>
    <tr>
        <td>Место для Вашей рекламы освободится: <span data-to="<?php echo $banner['date_free'] ?>"></span></td>
    </tr>
<?php endforeach ?>
</table>
 
<script>
 
var banners = document.getElementById('banners').getElementsByTagName('span')
setInterval(function(){
    for (var i = 0; i < banners.length; ++i) {
        banner = banners[i]
        var to = new Date(banner.getAttribute('data-to'))
        var diff = Math.floor((to - new Date().getTime()) / 1000)
        var s = diff % 60
        diff = Math.floor(diff / 60)
        var m = diff % 60
        diff = Math.floor(diff / 60)
        var h = diff % 24
        var d = Math.floor(diff / 24)
        banner.innerHTML = d + ' дней ' + h + ' часов ' + m + ' минут ' + s + ' секунд'
    }
}, 1000)
 
</script>
1
Bakhrmoff
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 48
13.02.2014, 02:13  [ТС] #9
DrobyshevAlex, баннер размещается на двое суток,а отчет он начинает вести почему то от 1день 20 часов
0
DrobyshevAlex
1172 / 1122 / 94
Регистрация: 31.05.2012
Сообщений: 3,059
13.02.2014, 02:15 #10
часовой пояс установите нужный в бд или в жс часовой пояс)
1
Bakhrmoff
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 48
13.02.2014, 02:19  [ТС] #11
DrobyshevAlex, подождите сейчас проверю может у меня в коде погрешности))

Добавлено через 3 минуты
DrobyshevAlex, ну и как Вы уже догадались следующий вопрос) Как установить часовой пояс?)) Чтобы у каждого пользователя показывалось правильное время
0
DrobyshevAlex
1172 / 1122 / 94
Регистрация: 31.05.2012
Сообщений: 3,059
13.02.2014, 11:27 #12
попробуйте заменить строку
Javascript
1
var diff = Math.floor((to - new Date().getTime()) / 1000)
как то так
Javascript
1
2
var d = new Date()
var diff = Math.floor((to - (d.getTime() - d.getTimezoneOffset() * 60000)) / 1000)
0
Bakhrmoff
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 48
13.02.2014, 13:11  [ТС] #13
DrobyshevAlex, теперь у одного баннера отсчет идет в обратном направлении,у второго наоборот по возрастающей))
0
DrobyshevAlex
1172 / 1122 / 94
Регистрация: 31.05.2012
Сообщений: 3,059
13.02.2014, 13:20 #14
Лучший ответ Сообщение было отмечено Bakhrmoff как решение

Решение

значит getTimezoneOffset уже отрицательное значение возвращает, измените просто - на +
0
Bakhrmoff
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 48
13.02.2014, 19:32  [ТС] #15
DrobyshevAlex, сколько у Вас терпения!Спасибо большое!Все получилось!Напишите,пожалуйста,Ваш кошелек,желательно qiwi

Добавлено через 20 минут
И еще один нюанс) Как закрепить каждый таймер за своим баннером согласно id модуля
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
$datefree=date('Y-m-d H-i-s', strtotime("now"));
$db = JFactory::getDBO();
$date=date('Y-m-d H-i-s');
$query = "SELECT * FROM #__br where id_modules='".$module->id."' and date_free>'".$datefree."'";
$db->setQuery($query);
$mass=$db->loadAssocList();
if ($mass){
/*echo "<pre>";
print_r ($mass);*/
?>
<a href="<? echo $mass[0][links];?>" target="_blank">
<img src="/components/com_zakaz/uploads/<? echo $mass[0][img];?>" style="width:<? echo $params->get('width');?>px;height:<? echo $params->get('height');?>px"/>
</a><br><?php
 
/*
$banners = array(
    array('date_free' => '2014-02-15 00:00:00'),
    array('date_free' => '2014-02-20 00:00:00'),
    array('date_free' => '2014-02-25 00:00:00'),
);
*/
 
$res = mysql_query("SELECT * FROM `rvorh_br`") or die(mysql_error());
$banners = array();
while($row = mysql_fetch_assoc($res))
    $banners[] = $row;
 
 
?>
 
<table id="banners">
<?php foreach ($banners as $banner) : ?>
    <tr>
        <td>Место для Вашей рекламы освободится: <span data-to="<?php echo $banner['date_free'] ?>"></span></td>
    </tr>
<?php endforeach ?>
</table>
 
<script>
 
var banners = document.getElementById('banners').getElementsByTagName('span')
setInterval(function(){
    for (var i = 0; i < banners.length; ++i) {
        banner = banners[i]
        var to = new Date(banner.getAttribute('data-to'))
        var d = new Date()
        var diff = Math.floor((to - (d.getTime() + d.getTimezoneOffset() * 60000)) / 1000)
        var s = diff % 60
        diff = Math.floor(diff / 60)
        var m = diff % 60
        diff = Math.floor(diff / 60)
        var h = diff % 24
        var d = Math.floor(diff / 24)
        banner.innerHTML = d + ' д. ' + h + ' ч. ' + m + ' м. ' + s + ' с.'
    }
}, 1000)
 
</script>
Добавлено через 5 часов 35 минут
DrobyshevAlex, дружище,помогайте)))
0
DrobyshevAlex
1172 / 1122 / 94
Регистрация: 31.05.2012
Сообщений: 3,059
13.02.2014, 19:44 #16
Я понятия не имею.
Я даже сути вопроса не понял.
0
Bakhrmoff
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 48
13.02.2014, 19:49  [ТС] #17
DrobyshevAlex,
0
Миниатюры
Вывод отсчета времени (ограничение срока действия контента)  
Bakhrmoff
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 48
13.02.2014, 19:52  [ТС] #18
DrobyshevAlex, нужно как то привязать к id_modules целый день убил,что то никак не допетрю
0
DrobyshevAlex
1172 / 1122 / 94
Регистрация: 31.05.2012
Сообщений: 3,059
13.02.2014, 21:17 #19
Ну у вас же выборка есть уже я так понял, а Вы под каждым банером ещё выбираете все банеры.
<? echo $mass[0][img];?> это видимо как раз баннер в котором есть информация о времени?

вставляете код жс 1 раз в самом низу, иои при событии onload что бы выполнялся
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
<script>
 
var banners = []
 
banners.push(document.getElementById('banner-counter-1'))
//banners.push(document.getElementById('banner-counter-2')) ... перечисляете все баннеры
 
setInterval(function(){
    for (var i = 0; i < banners.length; ++i) {
        banner = banners[i]
        var to = new Date(banner.getAttribute('data-to'))
        var d = new Date()
        var diff = Math.floor((to - (d.getTime() + d.getTimezoneOffset() * 60000)) / 1000)
        var s = diff % 60
        diff = Math.floor(diff / 60)
        var m = diff % 60
        diff = Math.floor(diff / 60)
        var h = diff % 24
        var d = Math.floor(diff / 24)
        banner.innerHTML = d + ' д. ' + h + ' ч. ' + m + ' м. ' + s + ' с.'
    }
}, 1000)
 
</script>
а под каждый банером выводите
HTML5
1
2
3
4
5
<table>
    <tr>
        <td>Место для Вашей рекламы освободится: <span id="banner-counter-1" data-to="<?php echo $mass[0]['date_free'] ?>"></span></td>
    </tr>
</table>
только ID меняйте который в жс будете вставлять, нельзя что бы ид пересекались.
можно конечно класс какой то давать или по атрибуту выбрать все span и отфильтровать оставив только те, которые с атрибутом data-to

ну и меняете $mass[0]['date_free'] 0 на номер баннера от которого картинка выдоиться

я надеюсь код выборки баннеров у Вас один раз написан вверху? не делаете выборки каждый раз перед выводом баннера?
0
Bakhrmoff
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 48
13.02.2014, 21:25  [ТС] #20
DrobyshevAlex, баннер это модуль на джумла,создаю новый модуль создается новый баннер,отличаются только по id, в этом модуле я и дописывал скрипт отсчета времени то есть он получился общим для всех модулей теперь его нужно каким то образом привязать по id модулей)) если непонятно разъяснил спрашивайте попытаюсь перефразировать
0
13.02.2014, 21:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.02.2014, 21:25

Вывод контента в несколько колонок.не работает
Не могу понять что не правильно...Подскажите пожалуйста кто знает, буду очень...

Вывод данных из MySQL - вместо контента выводится ' "; }; ?> '
Всем добрый день! :) У меня проблема, нужно сделать вывод из базы данных MySQL...

Таймер обратного отсчета и вывод в Label времени в формате чч:мм:сс
Помогите реализовать. У меня есть таймер в 3 часа (10800000 ms) Мне нужно...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru