Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.05.2017, 02:04
Новичок на форуме
Отправить личное сообщение для Davias Посмотреть профиль Найти все сообщения от Davias
 
Регистрация: 30.05.2017
Сообщений: 6

Таймер обратного отсчета.
Ребят, нужна помощь. С js только начал знакомиться, поэтому возникают проблемы. Есть скрипт таймера и он вроде бы даже работает, но не так как хотелось бы Есть переменная date_to это то, до чего будет тикать таймер и переменная date - текущая дата. И он тикает обновляясь каждую секунду с помощью setTimeot() пока эти две даты не встретятся. Проблема вот в чём... Хотелось бы сделать так, чтобы не приходилось каждый раз в коде менять дату до которой он будет тикать, а чтобы при вызове функции таймер автоматический начинал с 01:00:00. Пробовал не указывать дату для переменной date_to(то есть оставлять там текущую) и писал date_to.setHours(1);, результат: при вызове функции таймер отображает 01:00:00 и стоит на этой цифре, то есть нет обратного отсчета. Интересно, что если изначально в переменной date_to стоит дата хоть на 1 сек больше, чем в date и прописано date_to.setHours(1), то оно показывает 01:00:01, 01:00:00, 00:59:59 и так далее, то есть отсчет идёт нормально, а если в date_to стоит текущая дата и я прибавляю час, то высвечивает 01:00:00 и замирает... Есть какие нибудь мысли? Код:
$(document).ready(function(){
function timer(){
var date = new Date();
var date_to = new Date();
date_to.setHours(3);

var time = date_to - date;

var hour = parseInt(time/(60*60*1000));
if(hour < 10){
	hour = "0" + hour;
}

var min = parseInt(time/(60*1000))%60;
if(min < 10){
	min = "0" + min;
}

var sec = parseInt(time/(1000))%60;
if(sec < 10){
	sec = "0" + sec;
}

var tiktak = hour + ":" + min + ":" + sec;

if(date_to > date){
	$("#clock").html("<span>" + tiktak + "</span>");
	setTimeout(timer,1000);
}
else{
	$("#clock").html("<font color=green>Готово!</font>")
};

};

$(function(){
	$("#stimer").click(function(){
		timer();
	});
});

});
Ответить с цитированием
  #2 (permalink)  
Старый 31.05.2017, 02:12
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Davias, date.setHours(1) это не прибавление часа, а установка, т.е. на час ночи.
Ответить с цитированием
  #3 (permalink)  
Старый 31.05.2017, 02:33
Новичок на форуме
Отправить личное сообщение для Davias Посмотреть профиль Найти все сообщения от Davias
 
Регистрация: 30.05.2017
Сообщений: 6

Rise,
Есть такое дело... Ошибка) Поменял date_to.setHours(1) на date_to.setHours(date.getHours()+1);, но суть не поменялась. Если в data_to прописана дата, например (2017,4,31,2,33,0)(на данный момент эта дата на 1 мин больше текущей), то отсчет начинается с 01:01:00 и идёт нормально, а если date_to оставить пустым и добавить к ней час таким date_to.setHours(date.getHours()+1); образом, то появляется 01:00:00 и стоит на месте.
Ответить с цитированием
  #4 (permalink)  
Старый 31.05.2017, 02:34
Новичок на форуме
Отправить личное сообщение для Davias Посмотреть профиль Найти все сообщения от Davias
 
Регистрация: 30.05.2017
Сообщений: 6

j0hnik,
Ну я немного страшнее написал)) Но суть не в этом и она от этого не поменялась
Ответить с цитированием
  #5 (permalink)  
Старый 31.05.2017, 02:39
Новичок на форуме
Отправить личное сообщение для Davias Посмотреть профиль Найти все сообщения от Davias
 
Регистрация: 30.05.2017
Сообщений: 6

j0hnik,
И ,по моему, getDate()+1 это прибавить день, а не час, если я не ошибаюсь

Последний раз редактировалось Davias, 31.05.2017 в 02:42.
Ответить с цитированием
  #6 (permalink)  
Старый 31.05.2017, 02:46
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от Davias Посмотреть сообщение
j0hnik,
И ,по моему, getDate()+1 это прибавить день, а не час, если я не ошибаюсь
Ой Извиняюсь конечно же
date_to.getHours() + 1
Ответить с цитированием
  #7 (permalink)  
Старый 31.05.2017, 02:49
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Davias, просто вынеси date_to за функцию:
var date_to = new Date();
    date_to.setHours(date_to.getHours()+1);
function timer(){
Ответить с цитированием
  #8 (permalink)  
Старый 31.05.2017, 02:50
Новичок на форуме
Отправить личное сообщение для Davias Посмотреть профиль Найти все сообщения от Davias
 
Регистрация: 30.05.2017
Сообщений: 6

j0hnik,
По поводу решения проблемы есть какие нибудь мысли?) Так как date_to.getHours() + 1 проблему не решило.
Ответить с цитированием
  #9 (permalink)  
Старый 31.05.2017, 02:55
Новичок на форуме
Отправить личное сообщение для Davias Посмотреть профиль Найти все сообщения от Davias
 
Регистрация: 30.05.2017
Сообщений: 6

Rise,
Алилуя) Так и не понял, почему ему не работалось нормально внутри функции, но всё получилось, спасибо
Ответить с цитированием
  #10 (permalink)  
Старый 31.05.2017, 02:56
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от Davias Посмотреть сообщение
j0hnik,
По поводу решения проблемы есть какие нибудь мысли?) Так как date_to.getHours() + 1 проблему не решило.
постом выше решение прибавит 1 час и будет уже от этого плясать
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Индивидуальный таймер обратного отсчета времени с редиректом pozitiv4ek Работа 2 11.12.2016 13:42
Таймер обратного отсчета Kity Элементы интерфейса 1 30.07.2016 11:56
Как сделать таймер обратного отсчета который бы запускался при открытии сайта ibutterfly777 Оффтопик 0 29.10.2014 10:55
Зацикленный таймер обратного отсчета levshaszr Элементы интерфейса 7 12.10.2014 23:20
Таймер обратного отсчета UNIX time TuxShot Общие вопросы Javascript 6 03.08.2014 13:36