定义后日期对象不存在?

时间:2018-09-24 19:08:04

标签: javascript arrays date

我正在尝试创建一个函数,该函数返回两个日期之间的日期数组。这是我的代码:

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”的行上操作date对象时,它返回为undefined或表示.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 :(得分:0)

您可以尝试将所需的逻辑封装在自己的类中,而不是尝试“扩展” 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()));

答案 1 :(得分:0)

我最终需要做的事情(解决了第一个问题之后)是通过Array.from()之类的方法将var temp设置为var datearray。这样,温度不会直接指向datearray,而我总是以数组中的一个项目结束。

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;
        }