我正在尝试创建一个函数,该函数返回两个日期之间的日期数组。这是我的代码:
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"));
答案 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;
}