Дата объекта не существует после определения? - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь создать функцию, которая возвращает массив дат между двумя датами.Это мой код:

Date.prototype.addDays = function(days) 
        {
            var date = new Date(this.valueOf());
            date.setDate(date.getDate() + days);
            return date;
        }


function getdaterange(startdate, enddate)
        {
            var s = new Date(startdate);
            var e = new Date(enddate);
            var datearray = [s];

            var done = false;
            while(!done)
            {
                var date = datearray.pop().addDays(1);
                if (date == e)
                {
                    datearray.push(date);
                    done = true;
                }                     
            }
        }

getdaterange("2018-09-01", "2018-09-25");

Функция еще не завершена, но когда я пытаюсь манипулировать объектом даты в строке, которая устанавливает переменную "date", он возвращается как неопределенный или говорит, что.pop () не является методом Date.Я пробовал несколько разных конфигураций.(Где я изменяю то, как я манипулирую объектом даты. Например: определение переменной и последующий вызов метода .addDays ().)

Это только один из них.Кто-нибудь знает, что происходит?

Спасибо за любую помощь в продвинутом.

Спасибо за вашу помощь от комментариев.Отредактированный код:

Date.prototype.addDays = function(days) 
{
var date = new Date(this.valueOf());
date.setDate(date.getDate() + days);
return date;
} 

function getdaterange(startdate, enddate)
        {
            var s = new Date(startdate);
            var e = new Date(enddate);
            var datearray = [s];

            var done = false;
            while(!done)
            {
                var temp = datearray;
                var date = temp.pop().addDays(1);

                if (date.valueOf() == e.valueOf())
                {
                    datearray.push(date);
                    done = true;
                }
                else
                {
                    datearray.push(date);
                }      
            }
          return datearray;
        }
        console.log(getdaterange("2018-09-01", "2018-09-25"));

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

То, что мне в итоге нужно было сделать (после исправления первой проблемы), было установлено var temp равным var datearray с помощью метода, подобного Array.from ().Таким образом, temp не указывал непосредственно на массив дат, и у меня всегда был один элемент в массиве.

Date.prototype.addDays = function(days) 
        {
            var date = new Date(this.valueOf());
            date.setDate(date.getDate() + days);
            return date;
        }

function getdaterange(startdate, enddate)
        {
            var s = new Date(startdate);
            var e = new Date(enddate);
            var datearray = [s];
            var done = false;

            while(!done)
            {
                var temp = Array.from(datearray);
                var date = temp.pop().addDays(1);

                if (date.valueOf() == e.valueOf())
                {
                    datearray.push(date);
                    done = true;
                }
                else
                {
                    datearray.push(date);
                }      
            }
          return datearray;
        }
0 голосов
/ 24 сентября 2018

Вместо того, чтобы пытаться «расширить» класс Date, вы можете инкапсулировать нужную логику в его собственный класс следующим образом

class DateUtil {

    static addDays(date, days) {
        return date.setDate(date.getDate() + days)
    }

    static getDateRange(dateStart, dateEnd) {
        let date = new Date(dateStart);
        let endDate = new Date(dateEnd);
        let dates = [];
        while (date < endDate) {
            dates.push(new Date(this.addDays(date, 1)))
        }
        return dates;
    }
}

DateUtil.getDateRange('2018-09-01', '2018-09-25')
    .forEach(date => console.log(date.toString()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...