📅  最后修改于: 2023-12-03 15:27:48.695000             🧑  作者: Mango
在开发中,我们经常需要获取一个月中的所有星期一日期。这个需求在日历、会议、课程表等应用场景中比较常见。
以下是两种实现方式,分别使用了jQuery和原生JavaScript。
function getMondays(date) {
// 清除时间信息
date.setHours(0, 0, 0, 0);
// 获取这个月的第一天是星期几
var firstDayOfWeek = new Date(date.getFullYear(), date.getMonth(), 1).getDay();
// 计算第一周的日期
var firstMondayDate = firstDayOfWeek === 1 ? 1 : 8 - firstDayOfWeek;
var mondays = [new Date(date.getFullYear(), date.getMonth(), firstMondayDate)];
// 计算其余周的日期
while (date.getMonth() === mondays[mondays.length - 1].getMonth()) {
var latestMondayDate = mondays[mondays.length - 1].getDate() + 7;
mondays.push(new Date(date.getFullYear(), date.getMonth(), latestMondayDate));
}
return mondays.slice(0, -1);
}
// Example usage:
var mondays = getMondays(new Date());
console.log(mondays);
以上代码中,getMondays()
函数的参数是一个日期对象,表示一个月的任何一天。如果不传入参数,则默认使用当天的日期。
getMondays()
函数使用 new Date()
创建一个日期对象,并清除其中的时间信息(小时、分钟、秒、毫秒)。然后,它使用 new Date(year, monthIndex[, day[, hour[, minutes[, seconds[, milliseconds]]]]])
创建一个新日期对象,表示该月的第一天。 getDay()
方法返回星期几的索引,其中0表示星期天,1表示星期一,以此类推。如果第一天是星期一,则返回值为1;如果是星期二,则返回值为2,以此类推。
接下来,它计算第一周的星期一日期,并将其添加到 mondays
数组中。
随后,getMondays()
函数使用了一个 while
循环,直到由最后一个星期一日期生成的日期对象的月份与原始日期对象的月份不同时结束。 在循环中,它指定“上一个星期一日期 + 7天”来生成下一个星期一日期,并将其添加到 mondays
数组中。
最后,getMondays()
函数返回 mondays
数组,其中包含当前月中的所有星期一日期。
注意 return
语句中使用了 slice()
方法来去掉最后一个星期一日期,因为有可能在下个月会用到。
function getMondays(date) {
// 清除时间信息
date.setHours(0, 0, 0, 0);
// 获取这个月的第一天是星期几
var firstDayOfWeek = new Date(date.getFullYear(), date.getMonth(), 1).getDay();
// 计算第一周的日期
var firstMondayDate = firstDayOfWeek === 1 ? 1 : 8 - firstDayOfWeek;
var mondays = [new Date(date.getFullYear(), date.getMonth(), firstMondayDate)];
// 计算其余周的日期
while (date.getMonth() === mondays[mondays.length - 1].getMonth()) {
var latestMondayDate = mondays[mondays.length - 1].getDate() + 7;
mondays.push(new Date(date.getFullYear(), date.getMonth(), latestMondayDate));
}
return mondays.slice(0, -1);
}
// Example usage:
var mondays = getMondays(new Date());
console.log(mondays);
以上代码和 jQuery 代码非常相似,只是在获取日期对象和控制流程方面有所不同。
我们同样使用 new Date()
创建日期对象,然后清除其中的时间信息。
随后,它计算第一个星期一日期,并将其添加到 mondays
数组中。
接下来,原生JavaScript代码在 while
循环内查找当前月中所有星期一日期。 在每次迭代中,它指定上一个星期一日期加上 7 天,并将其添加到 mondays
数组中。
最后,它返回一个由所有星期一日期组成的数组。
这些代码将帮助你轻松地获取一个月中的所有星期一日期,从而为你的日历、会议、课程表等应用程序提供基础数据。