Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Таймер обратного отсчета. (https://javascript.ru/forum/events/69118-tajjmer-obratnogo-otscheta.html)

Davias 31.05.2017 02:04

Таймер обратного отсчета.
 
Ребят, нужна помощь. С 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();
	});
});

});

Davias 31.05.2017 02:33

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 и стоит на месте.

Davias 31.05.2017 02:34

j0hnik,
Ну я немного страшнее написал)) Но суть не в этом и она от этого не поменялась :(

Davias 31.05.2017 02:39

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

j0hnik 31.05.2017 02:46

Цитата:

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

Ой Извиняюсь конечно же
date_to.getHours() + 1

Rise 31.05.2017 02:49

Davias, просто вынеси date_to за функцию:
var date_to = new Date();
    date_to.setHours(date_to.getHours()+1);
function timer(){

Davias 31.05.2017 02:50

j0hnik,
По поводу решения проблемы есть какие нибудь мысли?) Так как date_to.getHours() + 1 проблему не решило.

Davias 31.05.2017 02:55

Rise,
Алилуя) Так и не понял, почему ему не работалось нормально внутри функции, но всё получилось, спасибо :)

j0hnik 31.05.2017 02:56

Цитата:

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

постом выше решение прибавит 1 час и будет уже от этого плясать


Часовой пояс GMT +3, время: 04:30.