Мне нужно получить даты следующих 3 месяцев четверга, а затем вывести эти даты в поле выбора со значением, отформатированным как дд / мм / гггг, но выбор будет отображаться как «Четверг, 12 апреля 2021 года», в идеале в jQuery, но PHP тоже подойдет.
<select>
<option value = "08/04/2021">Thursday 8th April 2021</option>
<option value = "15/04/2021">Thursday 15th April 2021</option>
<option value = "22/04/2021">Thursday 22nd April 2021</option>
etc
etc
</select>
Я нашел этот jsfiddle, который получает все четверги текущего месяца, но мне нужно, чтобы это были СЛЕДУЮЩИЕ 3 месяца четверга, начиная с сегодняшней даты. (и в том числе сегодня, если сегодня четверг).
Было бы хорошо, если бы это были следующие 12 четверг с сегодняшней даты.
На самом деле это ряд вопросов: добавьте 3 месяца к дате, получите следующий четверг, добавьте неделю (7 дней) к дате, отформатируйте дату как дд / мм / гггг и как добавить параметры в выборку. Вам нужно добавить код, чтобы хотя бы показать, как вы это делаете. jQuery и PHP - это совершенно разные языки, поэтому вам также следует выбрать, какой из них вы хотите использовать (возможно, PHP, если разница в часовом поясе между клиентом и сервером не является проблемой).



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Чтобы получить следующие X месяцев, вы можете:
function getNextMonths(num, include_current = false) {
let current = new Date();
let months = [];
if (include_current) {
months.push(current);
num--;
}
for (let i = 1; i <= num; i++) {
let next = new Date();
next.setDate(1);
next.setMonth(current.getMonth() + i);
months.push(next);
}
return months;
}
console.info(getNextMonths(3)); // Gives you the next three months
Оттуда вам просто нужно зациклить месяцы и оценить их дни:
function getDayOfWeek(num_week_day, dates) {
let days = [];
for (let i = 0; i < dates.length; i++) {
// Evaluate current month
let current = {
year: dates[i].getFullYear(),
month: dates[i].getMonth()
};
current.days = new Date(current.year, current.month + 1, 0).getDate();
// Loop & evaluate days
for (let d = 1; d <= current.days; d++) {
let date = new Date(current.year, current.month, d);
if (date.getDay() == num_week_day) {
days.push(date);
}
}
}
return days;
}
// Get all Thursdays (4th day of the week) within the next 3 months.
console.info(getDayOfWeek(4, getNextMonths(3)));
// Get Thursdays within the next 3 months including the current one
console.info(getDayOfWeek(4, getNextMonths(3, true)));
// Get Thursdays within the next 3 months including the current one...
let thursdays = getDayOfWeek(4, getNextMonths(3, true));
//...but keep only those Thursdays that are in the future
let today = new Date();
let filtered = thursdays.filter(function (date) {
return date.getTime() >= today.getTime();
});
console.info(thursdays, filtered);
Обе функции возвращают массив объектов Date - вам может потребоваться отформатировать их в соответствии с вашими потребностями. См. Эту ветку для различных подходов к тому, как это сделать:
Как уже указывалось в комментариях, ссылаясь на эта ветка, вы также можете рассмотреть moment.js для операций с датами JavaScript.
Спасибо. Как мне взять этот массив и поместить его в поле выбора?
Ходить по массиву - довольно простая вещь, так что вы сможете освоить ее в кратчайшие сроки. То же самое и с как создавать HTML-элементы с помощью JavaScript. У вас уже есть все подвижные части того, как использовать объекты даты для ваших целей из приведенного вами примера, моего ответа и ссылок RobG, hppycoder и я связал, поэтому я возьму его оттуда.
Спасибо. Предложенный вами код возвращает СЛЕДУЮЩИЕ 3 месяца, возможно, я не объяснил, но это должны быть следующие 3 месяца четверга, начиная с месяца текущей даты. Так, например, он вернет все четверги апреля, мая и июня (исключая любые предыдущие четверги с сегодняшней даты), если будет запущен сегодня.
Мне удалось включить этот месяц, изменив i = 1 на i = 0 в getNextMonths (), однако я не уверен, как выводить только четверг с сегодняшней даты, а не раньше?
Я обновил код, так что теперь вы можете включить текущий месяц (работает более или менее так же, как вы уже выяснили). Кроме того, я включил пример того, как вы можете фильтровать даты - в настоящее время он будет выдавать вам каждый четверг предстоящий в течение следующих трех месяцев, включая текущий.
Я бы посмотрел на похожий пост (этот в понедельник) stackoverflow.com/questions/34979051/…