Почему мои часы обратного отсчета перестали отсчитывать? - PullRequest
0 голосов
/ 29 мая 2020

Позвольте мне начать с того, что я довольно не понимаю JavaScript ..

Так, например, я просто хочу установить ссылку на обратный отсчет, который будет отсчитывать до тех пор, пока не будет открыт определенный сервер.

Я использовал https://www.w3schools.com/howto/howto_js_countdown.asp для обратного отсчета и изменил его так, чтобы он использовал время сервера вместо времени клиента.

var serverNow =  new Date().toLocaleString("en-US", {timeZone: "Asia/Seoul"});

var tomorrowKR = new Date(serverNow);
tomorrowKR.setDate(tomorrowKR.getDate()+1)
tomorrowKR.setHours(18,0,0,0)

var countDownDateKR = tomorrowKR.getTime();
var x = setInterval(function() {
  var now = new Date(serverNow).getTime();
  var distanceKR = countDownDateKR - now;
  var hoursKR = Math.floor((distanceKR % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  var minutesKR = Math.floor((distanceKR % (1000 * 60 * 60)) / (1000 * 60));
  var secondsKR = Math.floor((distanceKR % (1000 * 60)) / 1000);

  document.getElementById("ASIAServer").innerHTML = "The KR Server is currently CLOSED, but will open again in " + hoursKR + "h " + minutesKR + "m " + secondsKR + "s (6 PM KST)" ;
  }, 1000);
}

Кажется, что ошибка находится в строке

var now = new Date(serverNow).getTime();

, если я удалю «serverNow» и просто позволю ему катиться как время клиента, он будет отсчитывать. Изменение его на сервер Теперь он отображает правильное время обратного отсчета, но фактическое действие обратного отсчета останавливается.

Что с этим происходит?

1 Ответ

1 голос
/ 29 мая 2020

Когда вы запускаете new Date(serverNow) внутри setInterval, значение не обновляется, потому что serverNow не изменяется. serverNow - это фиксированная строка, в которой сохраняется любое значение, которое она имела при первой загрузке страницы. Чтобы now обновлялся с каждым интервалом, вам нужно получить последнее время сервера:

now = new Date(new Date().toLocaleString("en-US", {timeZone: "Asia/Seoul"})).getTime();

Определенно не самый красивый код в мире. Вы должны знать, что работать с датами и часовыми поясами в vanilla Javascript всегда беспорядочно. Многие люди используют Moment. js, чтобы избавиться от значительной головной боли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...