Автоматический отсчёт до времени окончания акции с плагином TimeTo
Здравствуйте. На сайте каждую неделю в пятницу в час ночи стартует
var today = new Date(); var currentDay = today.getDay(); var timeToEndAction; switch (currentDay){ case 0: timeToEndAction = new Date(new Date(new Date(new Date().setDate(today.getDate() + 5)).setHours(1)).setMinutes(0)).setSeconds(0); break; case 1: timeToEndAction = new Date(new Date(new Date(new Date().setDate(today.getDate() + 4)).setHours(1)).setMinutes(0)).setSeconds(0); break; case 2: timeToEndAction = new Date(new Date(new Date(new Date().setDate(today.getDate() + 3)).setHours(1)).setMinutes(0)).setSeconds(0); break; case 3: timeToEndAction = new Date(new Date(new Date(new Date().setDate(today.getDate() + 2)).setHours(1)).setMinutes(0)).setSeconds(0); break; case 4: timeToEndAction = new Date(new Date(new Date(new Date().setDate(today.getDate() + 1)).setHours(1)).setMinutes(0)).setSeconds(0); break; case 5: timeToEndAction = new Date(new Date(new Date(new Date().setDate(today.getDate() + 7)).setHours(1)).setMinutes(0)).setSeconds(0); break; case 6: timeToEndAction = new Date(new Date(new Date(new Date().setDate(today.getDate() + 6)).setHours(1)).setMinutes(0)).setSeconds(0); break; } $('#countdown').timeTo( { timeTo: new Date(timeToEndAction), displayDays: 2 } ); Вопрос: можно ли как-то код улучшить(упростить) особенно switch? |
Цитата:
var a=[5,4,3,2,1,7,6]; timeToEndAction = new Date(new Date(new Date(new Date().setDate(today.getDate()+a[currentDay])).setHours(1)).setMinutes(0)).setSeconds(0); |
Цитата:
|
таймер время до часу пятницы
Sigizmund2012,
<!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script src="http://lexxus.github.io/jq-timeTo/js/jquery.timeTo.min.js"></script> <link rel="stylesheet" type="text/css" media="screen" href="http://lexxus.github.io/jq-timeTo/stylesheets/stylesheet.css"> <link rel="stylesheet" type="text/css" media="screen" href="http://lexxus.github.io/jq-timeTo/stylesheets/timeTo.css"> <style type="text/css"> #countdown{ margin: 70px; } </style> <script> $(function() { var b = [5, 4, 3, 2, 1, 7, 6], a = new Date, d = a.getHours(), c = a.getDay(), b = new Date(a.getFullYear(), a.getMonth(), a.getDate() + (5 != c || d ? b[c] : 0), 1, 0, 0); $("#countdown").timeTo({ timeTo: b, displayDays: 2, theme: "white", displayCaptions: !0, fontSize: 48, captionSize: 14, lang: "ru" }) }); </script> </head> <body> <div id="countdown"></div> </body> </html> |
Sigizmund2012,
выше код правильный но бесполезный правильный код $('#clock').timeTo({ seconds: количество секунд до даты согласно серверу а не времени на клиенте}); |
рони,
Как обычно коротко, но можно голову сломать пока поймёшь, как работает. Кстати, в коде (5 != c || d ? b[c] : 0) непонятно, зачем часы с 5 сравнивать, нужно ведь учитывать время в пятницу от 0 до 1 ночи. Все эти a,b,c трудно читаются. Доработал свой говнокод, получилось так: var today = new Date(); var currentDay = today.getDay(); var currentHours = today.getHours(); var timeToEndAction; var arr=[5,4,3,2,1,7,6]; timeToEndAction = new Date(new Date(new Date(new Date().setDate(today.getDate()+( (currentDay === 5 && currentHours < 1 ) ? 0 : arr[currentDay] ))).setHours(1)).setMinutes(0)).setSeconds(0); $('#countdown').timeTo( { timeTo: new Date(timeToEndAction), displayDays: 2 } ); |
Цитата:
jQuery(document ).ready(function(){ var today; var currentDay; var currentHours; var timeToEndAction; var arr=[5,4,3,2,1,7,6]; $.ajax({ url: "/sendmailforms/time.php", cache: false, success: function(data){ today = new Date(data); currentDay = today.getDay(); currentHours = today.getHours(); timeToEndAction = new Date(new Date(new Date(new Date().setDate(today.getDate()+( (currentDay === 5 && currentHours < 1 ) ? 0 : arr[currentDay] ))).setHours(1)).setMinutes(0)).setSeconds(0); $('#countdown').timeTo( { timeTo: new Date(timeToEndAction), displayDays: 2 } ); } }); }); |
Sigizmund2012,
currentDay === 5 && currentHours < 1 === currentDay === 5 && !currentHours === 5 != c || d 5 != c || d перевод сегодня не пятница или время больше 1 часа |
Sigizmund2012,
вопрос остался зачем все строки кроме Цитата:
|
Цитата:
|
Цитата:
|
Sigizmund2012,
ненужен запрос совсем достаточно распечатать число при первоначальной отдаче страницы - сам не знаю php что то типа $('#countdown').timeTo({ seconds: echo (date("s") - date("s")) , displayDays: 2 }) |
Sigizmund2012, для медитации
PHP. Сколько дней/часов/минут/секунд осталось до указанного события. |
По опыту, наилучшее, отдавать сервером скрипт-переменную: Гринвич-время(в секундах) отдачи страницы севером.
Тады простенький таймер на странице позволяет отсчитывать всякие фичи до нужных событий. Для полного кайфа отдают переменной и тайм зону текущего юзера(типично она настраивается юзером в профиле) |
Цитата:
var today = new Date( '<?php echo date("c"); ?>' ); var currentDay = today.getDay(); var currentHours = today.getHours(); var timeToEndAction; var arr = [5,4,3,2,1,7,6]; timeToEndAction = new Date(new Date(new Date(new Date().setDate(today.getDate()+( (currentDay === 5 && currentHours < 1 ) ? 0 : arr[currentDay] ))).setHours(1)).setMinutes(0)).setSeconds(0); $('#countdown').timeTo( { timeTo: new Date(timeToEndAction), displayDays: 2 } ); |
Цитата:
|
рони,
У сервера отдача плюс/минус полминуты, если тьву нужно запускать ровно в 9:00, (К примеру так у меня лотерейка запускается на пять мин) То проще от получения странице сходу вычислить нужную поправку и запустить свой более точный таймер в нужное время от текущего, а серв еще может страницу и не отдать, а так работаем с чем есть |
:( :( :( надо то всего php программисту глянуть, всё ли верно
<script> $(function() { $("#countdown").timeTo({ seconds: <?php ini_set('display_errors', 'Off'); $a = strtotime("now"); $b = strtotime("next Friday 1 hours 0 seconds"); echo ($b - $a); ?>, displayDays: 2, theme: "white", displayCaptions: !0, fontSize: 48, captionSize: 14, lang: "ru" }) }); </script> |
Цитата:
<?php /* Count seconds before action ending */ $currentDay = date( "w" ); $arrDays = array("5", "4", "3", "2", "1", "7", "6"); $secondsToEndAction = mktime(1, 0, 0, date("n"), date("j") + $arrDays[$currentDay], date("Y")) - time(); ?> $('#countdown').timeTo( { seconds: <?php echo $secondsToEndAction ?>, displayDays: 2 } ); |
Часовой пояс GMT +3, время: 05:56. |