我必须迭代多个日期间隔:-例如:
我只需要获取给定月份的天数:在本例中为 6 月 (06)。
理论上我应该获得这样的数组:
var june = [09,10,11,12,13,14,15,01,02,17,18,29,30];
我采取的步骤:
a.在 php 查询中将所有出发、返回日期和日期间隔数作为数组(它们是字符串数组,而不是日期对象,如果是日期间隔数,则为整数)
b.在 javascript 中创建出发和返回日期的数组:var Departure, var rback, var number
c.定义空的天数数组:
var days=[];
d。循环遍历所有日期间隔以获得间隔之间的所有日期
function enumerateDaysBetweenDates(startDate, endDate) {
startDate = moment(startDate,"DD/MM/YYYY");
endDate = moment(endDate,"DD/MM/YYYY");
var now = startDate, dates = [];
while (now.isBefore(endDate) || now.isSame(endDate)) {
dates.push(now.format("DD/MM/YYYY"));
now.add(1, 'days');
}
return dates;
};
for (i = 0; i < number.length; i++) {
var mdepart=departure[i];
var mrback=rback[i];
days.push(enumerateDaysBetweenDates(mdepart,mrback));
};
现在我需要过滤所有非六月的日期:
function checkd(num) {
return num.includes("/06/");
};
var june=days.filter(checkd);
问题:当我运行此命令时,我收到错误“days.filter 不是函数”...
如果我像这样运行它:
var june = Object.values(days).filter(checkd);
我有一个空数组...
我不知道问题出在哪里:也许是因为我首先将日期数组元素定义为字符串,然后使用 moment.js 现在将它们作为日期?
完整代码:
var days=[];
var number=[1,2,3,4];
var departure=[09/06/2023,28/05/2023, 17/06/2023, 29/06/2023];
var rback=[15/06/2023,02/06/2023,18/06/2023,04/07/2023];
function enumerateDaysBetweenDates(startDate, endDate) {
startDate = moment(startDate,"DD/MM/YYYY");
endDate = moment(endDate,"DD/MM/YYYY");
var now = startDate, dates = [];
while (now.isBefore(endDate) || now.isSame(endDate)) {
dates.push(now.format("DD/MM/YYYY"));
now.add(1, 'days');
}
return dates;
};
for (i = 0; i < number.length; i++) {
var mdepart=departure[i];
var mrback=rback[i];
days.push(enumerateDaysBetweenDates(mdepart,mrback));
};
//Now I need to filter all dates that are not in June:
function checkd(num) {
return num.includes("/06/");
};
var june=days.filter(checkd);
//Error days.filter or empty array....
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
你不能像这样插入日期:15/06/2023,这是一个数学运算。
相反,这样做:
var rback=[new Date(15/06/2023),new Date(02/06/2023),new Date(18/06/2023),new Date(07/07/2023)];
console.log(rback[0]);
然后您可以将对象作为日期进行处理。到目前为止你得到的是浮点数,这可能是主要问题
此外,您检查的函数正在等待参数,而您没有在调用中给出它
var june=days.filter(checkd);