//獲取每個月有幾周(注:從第一個週一開始算該月第一週) function getWeeks(year, month) { var d = new Date(); // 該月第一天 d.setFullYear(year, month - 1, 1); var w1 = d.getDay(); if (w1 == 0) w1 = 7; // 該月天數 d.setFullYear(year, month, 0); var dd = d.getDate(); // 第一個週一 let d1; if (w1 != 1) d1 = 7 - w1 + 2; else d1 = 1; let week_count = Math.ceil((dd - d1 + 1) / 7); return week_count; } //根據年月周獲取該周從週一到週日的日期 function getWeekTime(year, month, weekday) { var d = new Date(); // 該月第一天 d.setFullYear(year, month - 1, 1); var w1 = d.getDay(); if (w1 == 0) w1 = 7; // 該月天數 d.setFullYear(year, month, 0); var dd = d.getDate(); // 第一個週一 let d1; if (w1 != 1) d1 = 7 - w1 + 2; else d1 = 1; var monday = d1 + (weekday - 1) * 7; var sunday = monday + 6; var from = year + "-" + month + "-" + monday; var to; if (sunday <= dd) { to = year + "-" + month + "-" + sunday; } else { d.setFullYear(year, month - 1, sunday); let days = d.getDate(); to = d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + days; } console.log(weekday + " 從" + from + " 到 " + to + ""); } //獲取每個月第幾周的週一的日期 function getMondayTime(year, month, weekday) { var d = new Date(); // 該月第一天 d.setFullYear(year, month - 1, 1); var w1 = d.getDay(); if (w1 == 0) w1 = 7; // 該月天數 d.setFullYear(year, month, 0); var dd = d.getDate(); // 第一個週一 let d1; if (w1 != 1) d1 = 7 - w1 + 2; else d1 = 1; var monday = d1 + (weekday - 1) * 7; return monday; } //獲取週一的日期 function getMonDate() { var d = new Date(), day = d.getDay(), date = d.getDate(); if (day == 1) return d; if (day == 0) d.setDate(date - 6); else d.setDate(date - day + 1); return d; } //得到週期名字 function getDayName(day) { var day = parseInt(day); if (isNaN(day) || day < 0 || day > 6) return false; var weekday = ["週日", "週一", "週二", "週三", "週四", "週五", "週六"]; return weekday[day]; } //得到當前日期在當月第幾周 //不包括跟上個月重合的部分 function getMonthWeek(a, b, c) { var date = new Date(a, parseInt(b) - 1, c), w = date.getDay(), d = date.getDate(); return Math.ceil((d + 6 - w) / 7); } //獲取當月最後一天日期 function getLastDay(year, month) { var new_year = year; //取當前的年份 var new_month = month++; //取下一個月的第一天,方便計算(最後一天不固定) if (month > 12) { new_month -= 12; //月份減 new_year++; //年份增 } var new_date = new Date(new_year, new_month, 1); //取當年當月中的第一天 return (new Date(new_date.getTime() - 1000 * 60 * 60 * 24)).getDate(); //獲取當月最後一天日期 } //根據當前日期獲取該天所在周,若該月1號不是週一,獲取該月第一週的週一日期,小於該日期的歸爲上個月最後一週 //當前日期幾月第幾周 function showDate() { var that = this; var d = this.getMonDate(); var ds = new Date(); var arr = []; for (var i = 0; i < 7; i++) { let weekDay = this.getDayName(d.getDay()); let date = d.getDate() + '日'; if (weekDay == '週一') { let beginTime = ds.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate(); that.state.beginTime = beginTime; } if (weekDay == '週日') { let endTime = ds.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate(); that.state.endTime = endTime; } arr.push({ weekDay: weekDay, date: date }); d.setDate(d.getDate() + 1); } let month = ds.getMonth() + 1; let weeks = this.getMonthWeek(ds.getFullYear(), month, ds.getDate()) - 1; //每個月週一日期 let oneDate = that.getMondayTime(ds.getFullYear(), month, 1); if (ds.getDate() < oneDate) { month = ds.getMonth(); weeks = this.getWeeks(ds.getFullYear(), month); } console.log('month:', month, 'weeks:', weeks); this.setState({ list: arr, yearDate: ds.getFullYear(), monthDate: month, month: ds.getMonth() + 1, monthWeek: '第' + weeks + '周', theMonthWeek: '第' + weeks + '周' }); }