javascript 过滤器数组给出空结果

问题描述 投票:0回答:1

我必须迭代多个日期间隔:-例如:

  1. 2023年6月9日 - 2023年6月15日
  2. 2023年5月28日 - 2023年6月2日
  3. 2023年6月17日 - 2023年6月18日
  4. 203年6月29日 - 2023年7月4日 ...等等

我只需要获取给定月份的天数:在本例中为 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>

javascript arrays momentjs
1个回答
-1
投票

你不能像这样插入日期: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);

© www.soinside.com 2019 - 2024. All rights reserved.