@Mishcake

Как изменить элемент в нужную дату и время?

Привет! Подскажите, пожалуйста, как можно сделать так, чтобы элемент на сайте был изменен в конкретную дату и конкретное время?

Например, чтобы 29 марта в 23:59 МСК 29 990 скрылся, а вместо него показался 39 990. Думал про setTimeout, но что-то никак не могу его настроить так, чтобы он сработал в нужный мне момент (вне зависимости от того, открыта у меня страница или нет).
  • Вопрос задан
  • 1078 просмотров
Решения вопроса 2
@AleksRap
Вам нужна функция, которая возвращает разницу между текущей датой и датой события. setInterval запускает эту функцию каждую секунду. Когда разница будет равна 0 или отрицательна - выполнить нужно действие.

Таким образом, если заход будет после события, то то условие сразу будет выполнено и покажется 39 990
Ответ написан
Комментировать
wapster92
@wapster92 Куратор тега JavaScript
setInterval внутри условия с проверкой нужной даты с текущей. Запускаешь функцию каждую секунду ну или как захочешь

Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Karpion
Если страница не открыта, то как можно что-то поменять?

Ваша задача распадается на две:
  1. При загрузке страницы - надо поместить в элемент нужное значение в соответствии с текущим временем.
  2. Затем надо вычислить, сколько времени осталось до следующего изменения - это не очень тривиально, но и не запредельно сложно; я уверен, что есть стандартные или библиотечные функции. И затем выставить setTimeout.
Идея проверять каждую секунду - отвратительная, ибо грузит процессор клиента/браузера.
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
С сервера передавать Unix timestamp момента, когда должно произойти переключение. Например, на PHP что-то типа:
$timestamp = date('2020-03-29T23:59:00+03:00'); // +03:00 потому что по МСК
echo "<script>const theMoment = ${timestamp};</script>";


В странице ловить этот «абсолютный» момент, независимый от временной зоны браузера. Раз в секунду «смотреть на часы» – не пора ли:
const checkTime = (ts) => {
  if (Date.now() < ts) return setTimeout(() => checkTime(ts), 1000);
  // время пришло
  document.getElementById('price').innerText = '39 990';
}

checkTime(theMoment * 1000); // в JS timestamp считается в миллисекундах
// а из PHP приходит в целых секундах


Ну и где-то на странице есть элемент с ценой на замену:
<p>
  Специальная цена на наш утюг: <span id="price">29 990</span> 
  <br>
  действует до 30 марта!
</p>
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы