Member 14013562 Ответов: 1

Массив дат в javascript


У меня есть 2 даты: начало и конец
Я создал массив дат, используя эти даты.

Дата начала = 11/1/2018 дата окончания = 4/31/2019

массив = [11/1/2018,12/1/2018,1/1/2019,2/1/2019....4/1/2019]

Проблема в том, что он создает массив дат правильно, если это не начало или конец месяца.

Таким образом, если моя начальная дата-11/1/2018, а конечная-04/31/2019, то массив печатает неправильные даты, иначе он работает нормально.

Не знаю, что я здесь делаю не так. Любая помощь будет оценена по достоинству.

Что я уже пробовал:

 function getDateArray (start, end) {
        var arr = [];
        var startDate = new Date(start);
        console.log(startDate);
        var endDate = new Date(end);
        console.log(endDate);

        var ddlPayType = document.getElementById("payType");
        var selectedPayType = ddlPayType.options[ddlPayType.selectedIndex].value;
        var selectedFrequency;
        if (document.getElementById("ddFrequency"))
            selectedFrequency = document.getElementById("ddFrequency").value;

        if (selectedPayType) {
            if (selectedPayType === "A") {
                endDate.setMonth(endDate.getMonth());
            }
            else if (selectedPayType === "B") {
                endDate.setMonth(endDate.getMonth() + 1);
            }
        }
        while (startDate <= endDate) {
         
                        arr.push(new Date(startDate));
                        startDate.setDate(endDate.getDate()+1);
                        startDate.setMonth(startDate.getMonth() +1);
                    }
               
           
            return arr;
}

Patrice T

Определите "неправильные даты", покажите пример

Patrice T

Кстати, определите также, что означает этот список.

Bryian Tan

Кстати, 31.04.2019 не является действительной датой.

Patrice T

"Дата начала = 11/1/2018 дата окончания = 4/31/2018"
Кстати, я боюсь, что дата окончания будет раньше даты начала.

F-ES Sitecore

4/31/2018 - это не действует для меня в Великобритании, это не действует для людей в Японии, но это действительно для людей в Америке. Откуда ваш javascript знает, что вы американец?

1 Ответов

Рейтинг:
0

Member 13915320

while (startDate < endDate) {
    arr.push(new Date(startDate));
    startDate.setDate(endDate.getDate() );
    startDate.setMonth(startDate.getMonth() + 1);
}


Member 14013562

Это не работает. Он печатает неправильный диапазон дат и полностью пропускает месяц.