27.07.2015, 12:52
|
|
Профессор
|
|
Регистрация: 16.07.2014
Сообщений: 267
|
|
Автоматический отсчёт до времени окончания акции с плагином TimeTo
Здравствуйте. На сайте каждую неделю в пятницу в час ночи стартует шабаш ведьм новая акция, а старая соответственно заканчивается. Установлен таймер обратного отсчёта 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?
|
|
27.07.2015, 16:36
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,209
|
|
Сообщение от Sigizmund2012
|
особенно 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);
|
|
27.07.2015, 17:20
|
|
Профессор
|
|
Регистрация: 16.07.2014
Сообщений: 267
|
|
Сообщение от ksa
|
Например заменить его на элементарный массив
|
Отличная идея, чуть хуже читаемость(как по мне), но код изрядно сокращает.
|
|
27.07.2015, 17:31
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,108
|
|
таймер время до часу пятницы
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>
|
|
27.07.2015, 18:02
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,108
|
|
Sigizmund2012,
выше код правильный но бесполезный
правильный код
$('#clock').timeTo({
seconds: количество секунд до даты согласно серверу а не времени на клиенте});
|
|
27.07.2015, 18:18
|
|
Профессор
|
|
Регистрация: 16.07.2014
Сообщений: 267
|
|
рони,
Как обычно коротко, но можно голову сломать пока поймёшь, как работает. Кстати, в коде (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
} );
Последний раз редактировалось Sigizmund2012, 27.07.2015 в 18:21.
|
|
27.07.2015, 18:49
|
|
Профессор
|
|
Регистрация: 16.07.2014
Сообщений: 267
|
|
Сообщение от рони
|
количество секунд до даты согласно серверу а не времени на клиенте
|
Верно, пришлось с сервера время брать. Вот что получилось:
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
} );
}
});
});
|
|
27.07.2015, 19:02
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,108
|
|
Sigizmund2012,
currentDay === 5 && currentHours < 1 === currentDay === 5 && !currentHours === 5 != c || d
5 != c || d перевод сегодня не пятница или время больше 1 часа
|
|
27.07.2015, 19:19
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,108
|
|
Sigizmund2012,
вопрос остался зачем все строки кроме
Сообщение от рони
|
$('#clock').timeTo({
seconds: количество секунд до даты согласно серверу а не времени на клиенте});
|
нафига ajax и прочая лабуда?
|
|
27.07.2015, 19:25
|
|
Профессор
|
|
Регистрация: 16.07.2014
Сообщений: 267
|
|
Сообщение от рони
|
Sigizmund2012,
currentDay === 5 && currentHours < 1 === currentDay === 5 && !currentHours === 5 != c || d
5 != c || d перевод сегодня не пятница или время больше 1 часа
|
Вообще нихрена не понял. Похоже я путаюсь в приоритете операторов, выражение 5 != c || d ? b[c] : 0 нужно вот так читать что-ли?: (5 != c) || (d ? b[c] : 0). Но оно же в результате вернёт булев тип.
|
|
|
|