javascript - 给定一周中的几天,如何获取两个日期之间的所有日期?
问题描述
首先,我知道这个问题与这个问题非常相似: 如何获取两个日期之间的所有星期日/星期一/星期二?
不过,我要问的是不同的,我正在尝试创建一个函数,其中星期几是一个变量,并且可以有多个,如下所示:
function findClassDays(daysOfWeek, firstDay, lastDay) {
const classDays = [];
return classDays;
}
firstDay
和lastDay
是 javascript 日期,而是daysOfWeek
一个数组,其中包含 ddd 时刻格式的星期几(例如,数组可以是['Mon', 'Wed', 'Fri']
.
daysOfWeek
如果以前不知道星期几并且可能有多个,我怎么能找到这两个日期之间的所有日子?我在链接的问题上看到了当您知道日期时它是如何工作的,而且它只是一个,但是如果数组有任何天数组合,我找不到解决方案。
解决方案
试穿这个尺寸:
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;
}
推荐阅读
- android - 如何在Android中处理按钮
- matlab - 通过 SVD 对卵巢癌数据进行 PCA
- node.js - 如何确保所有异步方法成功执行
- go - 将类型存储在结构中以进行比较
- python - 获取Python中每个键的最大值?
- java - 在spring boot应用程序中用slf4j替换java平台系统记录器
- reactjs - 关于 react usestate 和 setstate 的嵌套问题
- reactjs - 创建 React 应用程序错误:在带参数的路由中加载块 xx 失败
- php - “未定义变量:利润 $sum-$sub”
- c# - Telerik - 我可以从数据库加载报告定义吗