Есть задачка, в которой необходимо сравнить текущую дату с заданной в будущем с точностью до месяца включительно и определить разницу в количестве месяцев между датами и соответственно столько раз кликнуть на кнопку.
Т.е., к примеру, сегодняшняя дата: 15-06-2019, будущая: 07-09-2019 и надо прокликать (посчитать клики) ровно до того момента, когда получим 01-10-2019
Какой это месяц и сколько в нем дней (28,29,30 или 31) и текущий год (високосный или нет) нужно обязательно учитывать.
Вот, какие сделал наработки и дальше ступор..
var now = new Date();
var dateNow = new Date(now.getFullYear(), now.getMonth() + 1, now.getDate());
dateNow.setDate(1);
var future = new Date("08/09/2019");
var futureTime = future.getTime();
var dateTime = dateNow.getTime();
if (futureTime > dateTime) {
$(".btn").click();
dateTime += (86400000 * 30);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button class="btn">Button</button>
Немного не понял точные условия подсчёта, но предлагаю подсчитать количество месяцев заранее, а потом это число раз можно и по кнопке покликать.
function monthDiff(start, end) {
let months = 12*(end.getYear() - start.getYear()); // 12 месяцев на каждый год
months -= start.getMonth(); // сколько месяцев до начала
months += end.getMonth(); // сколько ещё осталось до конца
return months > 0 ? months : 0;
}
let now = new Date();
let future = new Date("2020-08-27");
let diff = monthDiff(now, future);
console.log(diff);
let clicks = [];
for(let i = 0; i < diff; ++i) clicks.push(`click ${i+1}`);
console.log(clicks.join('; '));
// Получим первое число следующего месяца:
let finalDate = new Date;
finalDate.setTime(future.getTime());
if (future.getDate() !== 1) {
finalDate.setMonth(future.getMonth()+1);
finalDate.setDate(1);
}
console.log(finalDate.toLocaleDateString())
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
На самом деле, точный расчёт зависит только от точной постановки задачи, что именно считать месяцем.
Неплохим решением будет использовать предназначенную для этого библиотеку:
let now = new Date();
let future = new Date("2020-08-27");
let diff = moment(future).diff(moment(now), 'month');
console.log(diff)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У Pinboard есть APIКогда я хочу обратится к нему из браузера мне выдает ошибку CORS
Планирую использовать slick slider в модальном окне (плагин Remodal)Посмотреть можно тут в разделе "Наши работы"
По клике на кнопку необходимо в Object добавить ObjectПоясняю что необходимо: Имею Object , который выглядит как структура разделов ( развернутый Object)
Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение