jessepinkman010101
@jessepinkman010101
Варю синий код

Как обновлять дату каждые n-дней, статический сайт?

Есть статический html с простой структурой

<span class="myDate">11 августа</span>

Мне нужно например каждые 3 дня менять дату.
Например будет проходить мероприятие 11 августа, потом каждые 3 дня; то есть 14 августа, 17 августа и тд.
Дату менять нужно не каждый день.

Первое что пришло в голову:
брать дату со спана, прибавлять к нему 3, затем проверить с текущей датой, если результат равно или больше текущей даты, то меняем дату в спане. Проблема такого решения: так-как сам html документ не меняется, а данные меняются только на клиенте, то проблема очевидна.

Второе, что пришло в голову, это собрать уже массив дат. Начиная с 6 августа собрать массив с датами +3. И уже рендерить в джс, такой вариант немного лучше предыдущего. Подскажите как лучше это реализовать, скорее всего кто-то тут подобную задачу решал, поделитесь решением.
  • Вопрос задан
  • 1410 просмотров
Решения вопроса 3
zkrvndm
@zkrvndm
Архитектор решений
JavaScript-ом запрашивайте дату с любого публичного сервера, их дохрена. Далее эту дату тупо подставляйте куда надо. При этом вы избежите привязки к дате компьютера пользователя.
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
Прописать какую-то дату как начало отсчёта, откуда далее трёхдневными шагами будет идти:
const startDate = new Date(2021, 7, 8); // начало отсчёта
const today = new Date(); // сегодня
const daysPassed = Math.floor((today - startDate) / 864e5);
const future = new Date();
future.setDate(future.getDate() + 3 - daysPassed % 3);

document.querySelector('span.myDate')
  .textContent = new Intl.DateTimeFormat(
    'ru-RU',
    { month: 'long', day: 'numeric' }
  )
  .format(future);
Ответ написан
@antares4045
Кроме как через JS на сегодняшний момент опций соверменный веб не предоставляет (кроме совсем экзотичных вариантов вроде открытия айфрейма на сервис, который вычисляет необходимую дату).

Идея с массивом была мыслью в веронм направлении, но массив конечен. здесь нужно деление без остатка.

<span class="myDate"></span>


    <script>
const startDate = new Date('2021-08-06')  //устанавливаем дату начала интервала 
const now = new Date() //определяем текущую дату
const delta = Math.trunc((+now - +startDate) / 3 / 24 / 3600 / 1000); // вычисляем количество трёхдневных интервалов которые прошли с момента startDate

const resDate = startDate
resDate.setDate(resDate.getDate() + delta * 3) 
//итоговая дата -- это стартовая дата + количево вычислиных трёхдневных интервалов, вычисленных на предыдущем шаге, умноженые на 3

const dateTag = document.querySelector('.myDate') //находим тег, в котором должна оказаться новая дата
dateTag.textContent = resDate.toLocaleString('ru', {day : '2-digit', month : 'long'})
//устанавливаем дату в соответствии с форматом DD MMMM (можете подобрать любой другой) 
    </script>


теперь при каждом обновлении страницы дата в поле будет соответствовать требованиям
с точки зрения ux я бы порекомендовал прикрутить здесь ещё интервал, чтобы дата обновлялась сама по себе раз в 10 минут и без перезагрузки

<span class="myDate"></span>


    <script>

function updateDate(){
    const startDate = new Date('2021-08-06')
    const delta = Math.trunc((+new Date() - +startDate) / 3 / 24 / 3600 / 1000);
    startDate.setDate(startDate.getDate() + delta * 3)
    document.querySelector('.myDate').textContent = startDate.toLocaleString('ru', {day : '2-digit', month : 'long'})
}   

updateDate() //обновляем дату при загрузке станицы
setInterval(updateDate, 10 * 60 * 1000) //затем обновляем данные каждые 10 минут

    </script>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mohovoy
@mohovoy
Что-то там программирую, кто бы знал что именно?
Попробуй использовать JavaScript
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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