Помогите написать код акции Есть день например сегодня 15, акция до 19 числа, 16 числа тоже 19, но когда наступает 19 число, то акция меняется до 23, то есть каждые 4 дня меняется число в блоке, как решить? Понимаю что примерно так, но дальше ничего в голову не лезет(
var date = new Date();
var target = 15;
var now = date.getDate();
if (now === target) {
// do something
target += 4;
}
Если я правильно понял формулировку, то:
В итоге пользователь всегда будет видеть "горячую акцию", до конца которой осталось менее 4 дней, но явного обмана не будет - в пределах 4 дней акция до одного и того же числа
Открываем описание класса Javascript Date() в любом гугле
Для простоты будем использовать номер дня в месяце getDate() (не самое очевидное название) за старт акции (то есть с 1 по 4 число, с 5 по 9, с 10 по 14 и так далее)
Есть текущая дата. Нам нужно узнать, когда при текущей дате "закончится" акция. Очевидно, что в следущий день, (номер-1) которого будет нацело делиться на 4. Минус один потому что нумерация дней начинается с 1, а числа в математике начинаются с 0.
/* Текущая дата и время */
var now = new Date();
/* Для отладки вы можете использовать не сегодняшнюю дату, а пример ниже */
// now = new Date(2017,4,14,2,31,30);
alert('Сегодня '+now.toLocaleString());
/* До тех пор, пока (номер дня - 1) не делится нацело на 4, прибавляем 1 день к дате */
while ((now.getDate()-1) % 4 != 0) {
now.setDate(now.getDate()+1);
}
alert('Акция закончится '+now.toLocaleString());
Более "страшный" вариант, но более надежный - считать в секундах от начала эпохи:
/* Текущая дата и время */
var now = new Date();
alert('Сегодня '+now.toLocaleString());
/* До тех пор, пока (номер дня - 1) не делится нацело на 4, прибавляем 1 день к дате */
var one_day = 1*24*60*60*1000; // Один день в миллисекундах
var period = 4*24*60*60*1000; // Период обновления акции в миллисекунды
// Прежде чем двигать время, надо округлить до целых суток, иначе имеем бесконечный цикл
now.setTime(now.getTime() - now.getTime() % one_day);
while ((now.getTime() % period) != 0) {
now.setTime(now.getTime()+one_day);
}
alert('Акция закончится '+now.toLocaleString());
Логика та же самая, только блок 4 дня переводится в секунды. Тонкости - временная зона
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости