Получите следующие 3 месяца по четвергам и выведите дату в выбранный

Мне нужно получить даты следующих 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 четверг с сегодняшней даты.

Я бы посмотрел на похожий пост (этот в понедельник) stackoverflow.com/questions/34979051/…

hppycoder 05.04.2021 22:50

На самом деле это ряд вопросов: добавьте 3 месяца к дате, получите следующий четверг, добавьте неделю (7 дней) к дате, отформатируйте дату как дд / мм / гггг и как добавить параметры в выборку. Вам нужно добавить код, чтобы хотя бы показать, как вы это делаете. jQuery и PHP - это совершенно разные языки, поэтому вам также следует выбрать, какой из них вы хотите использовать (возможно, PHP, если разница в часовом поясе между клиентом и сервером не является проблемой).

RobG 06.04.2021 01:03

См. Получить дату на следующей неделе определенного дня в JavaScript, JavaScript добавить день (дни), Функция JavaScript для добавления X месяцев к дате.

RobG 06.04.2021 01:08
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы получить следующие 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.

Спасибо. Как мне взять этот массив и поместить его в поле выбора?

user2115227 06.04.2021 10:17

Ходить по массиву - довольно простая вещь, так что вы сможете освоить ее в кратчайшие сроки. То же самое и с как создавать HTML-элементы с помощью JavaScript. У вас уже есть все подвижные части того, как использовать объекты даты для ваших целей из приведенного вами примера, моего ответа и ссылок RobG, hppycoder и я связал, поэтому я возьму его оттуда.

nosurs 06.04.2021 11:51

Спасибо. Предложенный вами код возвращает СЛЕДУЮЩИЕ 3 месяца, возможно, я не объяснил, но это должны быть следующие 3 месяца четверга, начиная с месяца текущей даты. Так, например, он вернет все четверги апреля, мая и июня (исключая любые предыдущие четверги с сегодняшней даты), если будет запущен сегодня.

user2115227 06.04.2021 12:30

Мне удалось включить этот месяц, изменив i = 1 на i = 0 в getNextMonths (), однако я не уверен, как выводить только четверг с сегодняшней даты, а не раньше?

user2115227 06.04.2021 12:51

Я обновил код, так что теперь вы можете включить текущий месяц (работает более или менее так же, как вы уже выяснили). Кроме того, я включил пример того, как вы можете фильтровать даты - в настоящее время он будет выдавать вам каждый четверг предстоящий в течение следующих трех месяцев, включая текущий.

nosurs 06.04.2021 14:21

Другие вопросы по теме