在工作中碰到了一個需求,根據用戶選擇的年月以及當月的第幾周,輸出這周的開始日期與結束日期,在網上搜了一下,發現大家的第一週一般都是從第一個週一開始計算的,與我們從本月一號開始算第一週的需求不太一致,於是自己寫了一個方法:
// 獲取指定月份的天數
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)