首页 > 解决方案 > 给定一周中的几天,如何获取两个日期之间的所有日期?

问题描述

首先,我知道这个问题与这个问题非常相似: 如何获取两个日期之间的所有星期日/星期一/星期二?

不过,我要问的是不同的,我正在尝试创建一个函数,其中星期几是一个变量,并且可以有多个,如下所示:

function findClassDays(daysOfWeek, firstDay, lastDay) {
  const classDays = [];

  return classDays;
}

firstDaylastDay是 javascript 日期,而是daysOfWeek一个数组,其中包含 ddd 时刻格式的星期几(例如,数组可以是['Mon', 'Wed', 'Fri'].

daysOfWeek如果以前不知道星期几并且可能有多个,我怎么能找到这两个日期之间的所有日子?我在链接的问题上看到了当您知道日期时它是如何工作的,而且它只是一个,但是如果数组有任何天数组合,我找不到解决方案。

标签: javascript

解决方案


试穿这个尺寸:

function findClassDays(daysOfWeek, firstDay, lastDay) {
    var allDays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];

    //get indices of days provided
    var firstDayIndex = firstDay.getDay();
    var lastDayIndex = lastDay.getDay();

    //determine which days are acceptable
    var acceptableDays = [];
    for(var i = firstDayIndex; i != lastDayIndex; i = (i + 1) % allDays.length){
        acceptableDays[acceptableDays.length] = allDays[i];
    }
    acceptableDays[acceptableDays.length] = allDays[lastDayIndex];

    //return the intersection (overlap) of daysOfWeek and acceptableDays
    return daysOfWeek.filter(function(d){return acceptableDays.indexOf(d) > -1;});
}

或者,如果您需要实际的日期对象,而不仅仅是星期几作为字符串:

function findClassDays(daysOfWeek, firstDay, lastDay){
    var allDays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];

    var matchingDates = [];
    while(firstDay.getDay() != lastDay.getDay()){
        //if firstDay is in daysOfWeek
        if(daysOfWeek.indexOf(allDays[firstDay.getDay()]) > -1){
            //add it to matchingDates
            matchingDates[matchingDates.length] = firstDay;
        }

        //increment first day
        firstDay = new Date(firstDay.getTime() + 1000 * 60 * 60 * 24);
    }
    //don't forget to check the last day as well
    if(daysOfWeek.indexOf(allDays[lastDay.getDay()]) > -1){
        matchingDates[matchingDates.length] = firstDay;
    }

    return matchingDates;
}

推荐阅读