@kiberlain

Как получить разницу между датами в javascript?

Суть: нужно сделать счётчик выводящий разницу между 9-ю вечера текущего дня и текущим временем

Набросал скрипт:

function countdown() {
	var now = new Date();
	var current = new Date();
	//console.log(current);
	current = current.setHours(21);
	current = new Date(current).getTime();
	current = current.toString();

	console.log(current);


	var serialDate = Date.parse(current);
	var endDate = new Date(serialDate);	
	
	var currentTime = now.getTime();
	var deltaTime = endDate - currentTime;
	

	var ms = Math.floor(deltaTime % 60);
	var s = Math.floor(deltaTime / 1000);
	var m = Math.floor(s / 60);
	var h = Math.floor(m / 60);
	var d = Math.floor(h / 24);
	h %= 24;
	m %= 60;
	s %= 60;	


	var weeks = Math.floor(d / 7); 
	var d = d - weeks * 2;
	
	// set text in browser table
	if (d<=0 && h<=0 && m<=0 && s<=0) {
		document.getElementById("hours").textContent = "00";
		document.getElementById("minutes").textContent = "00";
		document.getElementById("seconds").textContent = "00";
		clearTimeout(countdown);
	} else {

		h = (h < 10) ? "0" + h : h;
		m = (m < 10) ? "0" + m : m;
		s = (s < 10) ? "0" + s : s;	
		document.getElementById("hours").textContent = h;
		document.getElementById("minutes").textContent = m;
		document.getElementById("seconds").textContent = s;
	}	

	setTimeout(countdown, 2000);
}

countdown();


проблема в том что после current = current.setHours(21); current выводится уже в мили секундах и в итоге разница var deltaTime = endDate - currentTime; считается неправильно. А вот если конечную точку отсчёта устанавливать вот так Date.parse("June 22, 2018 15:00:00"); то всё норм.

Как быть?
  • Вопрос задан
  • 152 просмотра
Решения вопроса 2
VoidVolker
@VoidVolker Куратор тега JavaScript
Dark side eye. А у нас печеньки! А у вас?
Используйте momentjs — там все есть.
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
Метод объекта Date setHours() возвращает число: миллисекунды. Поэтому вместо
current = current.setHours(21) сделайте просто current.setHours(21)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы