0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 48
1

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

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

Author24 — интернет-сервис помощи студентам
Привет,всем гуру программирования) Хелп ми. Трабл заключается в следующем, есть сайт где пользователи могут загрузить свой баннер, баннер загружается на 2 дня,хочу сделать такую фичу чтобы после загрузки баннера под ним появлялась надпись мол "Место для Вашей рекламы освободится через столько то" и обратный отсчет в реальном времени,как лучше всего это организовать? брать данные из БД или лучше повесить какой нибудь обработчик на JS чтобы при загрузке срабатывал отсчет обратного времени. Спасибо за внимание)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.02.2014, 23:53
Ответы с готовыми решениями:

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

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

Уведомление о истечении срока действия
Привет всем! В общем делаю программу Учет сертификатов ЭЦП, есть таблица DBGrid, база данных на...

Изменение максимального срока действия пароля
Всем добрый день. Панель управления - Администрирование - Локальная политика безопасности далее...

33
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
13.02.2014, 00:33 2
ну уж точно не тащить каждую секунду данные с бд, да и зачем?
1
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 48
13.02.2014, 00:46  [ТС] 3
DrobyshevAlex, подскажите,пожалуйста,альтернативное решение
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
13.02.2014, 00:48 4
Так Вы же сами написали его.
Цитата Сообщение от Bakhrmoff Посмотреть сообщение
повесить какой нибудь обработчик на JS чтобы при загрузке срабатывал отсчет обратного времени
при открытии страницы просто время в жс запоминаете, когда срок заканчивается, и дальше каждую секунду выводите оставшееся время.
или просто время оставшиеся сразу запоминаете и каждую секунду уменьшаете.
если страница будет открыта часами, то лучше конечно первый вариант.
1
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
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
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
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
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
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
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 48
13.02.2014, 02:13  [ТС] 9
DrobyshevAlex, баннер размещается на двое суток,а отчет он начинает вести почему то от 1день 20 часов
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
13.02.2014, 02:15 10
часовой пояс установите нужный в бд или в жс часовой пояс)
1
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 48
13.02.2014, 02:19  [ТС] 11
DrobyshevAlex, подождите сейчас проверю может у меня в коде погрешности))

Добавлено через 3 минуты
DrobyshevAlex, ну и как Вы уже догадались следующий вопрос) Как установить часовой пояс?)) Чтобы у каждого пользователя показывалось правильное время
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
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
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 48
13.02.2014, 13:11  [ТС] 13
DrobyshevAlex, теперь у одного баннера отсчет идет в обратном направлении,у второго наоборот по возрастающей))
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
13.02.2014, 13:20 14
Лучший ответ Сообщение было отмечено Bakhrmoff как решение

Решение

значит getTimezoneOffset уже отрицательное значение возвращает, измените просто - на +
0
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
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
13.02.2014, 19:44 16
Я понятия не имею.
Я даже сути вопроса не понял.
0
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 48
13.02.2014, 19:49  [ТС] 17
DrobyshevAlex,
Миниатюры
Вывод отсчета времени (ограничение срока действия контента)  
0
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 48
13.02.2014, 19:52  [ТС] 18
DrobyshevAlex, нужно как то привязать к id_modules целый день убил,что то никак не допетрю
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
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
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 48
13.02.2014, 21:25  [ТС] 20
DrobyshevAlex, баннер это модуль на джумла,создаю новый модуль создается новый баннер,отличаются только по id, в этом модуле я и дописывал скрипт отсчета времени то есть он получился общим для всех модулей теперь его нужно каким то образом привязать по id модулей)) если непонятно разъяснил спрашивайте попытаюсь перефразировать
0
13.02.2014, 21:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2014, 21:25
Помогаю со студенческими работами здесь

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

Проверка срока действия сертификата безопасности
Добрый день (вечер)! Товарищи помогите с данной проблемой, есть файл в нем зашифрован текст....

напоминание о истечении срока действия сертификата пользователя
навыписывали через CA сертификаты пользователям. Как бы теперь напомнить себе или им, что пора...

Что фактически происходит при продлении срока действия ид-файла?
Добрый день Что фактически происходит при продлении срока действия ид-файла? Продляю срок...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru