在工作中碰到了一个需求,根据用户选择的年月以及当月的第几周,输出这周的开始日期与结束日期,在网上搜了一下,发现大家的第一周一般都是从第一个周一开始计算的,与我们从本月一号开始算第一周的需求不太一致,于是自己写了一个方法:
// 获取指定月份的天数
function mGetDate(year, month){
var d = new Date(year, month, 0);
return d.getDate();
}
// 根据年月日获取是周几
function getMonthWeek(year, month, day) {
var date = new Date(year, month-1, day), w = date.getDay(), d = date.getDate();
return Math.ceil(
(d + 6 - w) / 7
);
}
// 获取输入周的开始与结束日期
function getWeekDate(year, month, week){
var days = mGetDate(year,month);
var weekArr = [];
for(var i=1;i<=days;i++){
var weekNum = getMonthWeek(year,month,i);
console.log(weekNum,i)
var data = new Date(year, month-1, i);
if(i==1){
weekArr[0] = new Array();
weekArr[0].push(formatTime(data));
}else{
var weekNumLast = getMonthWeek(year,month,i-1)
if(weekNumLast == weekNum){
if(data.getDay()==1){
weekArr[weekNum-1] = new Array();
weekArr[weekNum-1].push(formatTime(data));
}else{
weekArr[weekNum-1].push(formatTime(data));
}
}else{
if(data.getDay()==0){
weekArr[weekNum-2].push(formatTime(data))
}else{
weekArr[weekNum-1].push(formatTime(data))
}
}
}
}
return weekArr[week-1][0],weekArr[week-1][weekArr[week-1].length-1];
}
// 时间格式化
function formatTime (date){
const year = date.getFullYear()
const month = date.getMonth() + 1
const day = date.getDate()
return [year, month, day].map(formatNumber).join('-');
}
function formatNumber (n){
n = n.toString()
return n[1] ? n : '0' + n
}
getWeekDate(2020,7,2)