estLabourMonth() {
const months = []
const monthCol = []
const start = new Date(this.form.project_start_date); // 开始时间
const end = new Date(this.form.project_end_date); // 结束时间
const end1 = new Date(end.getFullYear(),end.getMonth()+1,1) // 结束时间日期+1
const currentDate = start;
while (currentDate <= end1) {
const month = currentDate.getMonth();
let str = currentDate.getFullYear() + "-" + (month + 1) + "";
const s = currentDate.getFullYear() + "-0";
if (str == s) {
str = currentDate.getFullYear() + "-12";
}
months.push(str);
monthCol.push(str)
currentDate.setMonth(month + 1);
}
this.form.monthCol = monthCol
return months;
}
取出月份
<el-table-column
:key="index"
type="cell"
:index="index"
v-for="(m, index) in estLabourMonth()" // m 即为月份
:label="m+'月'"
width="120"
align="center"
:prop="m"
>
二、计算起始时间与结束时间之间有哪些周(注意!!:当一周分配在两个月中间的时候,我是周四之前的日期算在上月,之后的算在下月)
estLabourWeek() {
const weeks = []
const weekCol = []
const start = new Date(this.form.project_start_date); //起始日期
const end = new Date(this.form.project_end_date); //结束日期
let beginDate = new Date(start.getFullYear(), 0, 1); //起始日期年份的第一天
let endnDate = new Date(end.getFullYear(), 0, 1); //结束日期年份的第一天
let bd = beginDate.getDay() >= 4 ? (beginDate.getDay() - 7) : beginDate.getDay()
let ed = endnDate.getDay() >= 4 ? (endnDate.getDay() - 7) : endnDate.getDay()
let beginWeek = Math.ceil((parseInt((start - beginDate) / (24 * 60 * 60 * 1000)) + 1 + bd) / 7); //起始日期在当年的周数
let endWeek = Math.ceil((parseInt((end - endnDate) / (24 * 60 * 60 * 1000)) + 1 + ed) / 7); //结束日期在当年的周数
let startWeek = beginWeek
let startYear = start.getFullYear()
if(start.getFullYear() == end.getFullYear()) {
if(startWeek == 0) {
let dateb11 = new Date(startYear-1+'-01-01 00:00:00')
let date11 = new Date(startYear+'-01-01 00:00:00')
let date1231 = new Date(startYear-1+'-01-01 00:00:00')
let beforeWeek = Math.ceil((parseInt((date11 - date1231) / (24 * 60 * 60 * 1000)) + 1 + (dateb11.getDay() >= 4 ? (dateb11.getDay() - 7) : dateb11.getDay())) / 7); //起始年份前一年最后一天在当年的周数
weeks.push({
weeks: startYear-1 + "-" + beforeWeek,
show: this.weekToDate(startYear-1,beforeWeek,5)
});
weekCol.push(startYear-1 + "-" + beforeWeek)
startWeek++;
}
while (startWeek <= endWeek) {
let daten11 = new Date(end.getFullYear()+1+'-01-01 00:00:00')
let nextWeek = Math.ceil((parseInt((new Date(end.getFullYear()+1, 0, 1) - endnDate) / (24 * 60 * 60 * 1000)) + 1 + ed) / 7) //结束年份最后一天在当前年份的周数
let str,show
if(startWeek == nextWeek && daten11.getDay() < 4) {
str = start.getFullYear()+1 + "-1"
show = this.weekToDate(start.getFullYear()+1,1,5)
} else {
str = start.getFullYear() + "-" + startWeek
show = this.weekToDate(start.getFullYear(),startWeek,5)
}
weeks.push({
weeks: str,
show: show
});
weekCol.push(str)
startWeek++;
}
} else {
while (startYear <= end.getFullYear()) {
let dayMS=24*60*60*1000
let betDay = new Date(startYear+1+'-01-01 00:00:00').getTime() - new Date(startYear+'-01-01 00:00:00').getTime()
let newD1 = new Date(startYear,0,1)
let newD2 = new Date(startYear,11,31)
let betWeek = betDay / dayMS - (newD2.getDay()+1) - (7-newD1.getDay())
let day = 0
if(newD1.getDay() < 4 && newD1.getDay() > 0) {
day += 1
}
if(newD2.getDay() >= 4 || newD2.getDay() == 0) {
day += 1
}
day += (betWeek / 7)
for(let i = 1; i<=day; i++) {
if((startYear == start.getFullYear() && i >= startWeek) || (startYear > start.getFullYear() && startYear < end.getFullYear()) || (startYear == end.getFullYear() && i <= endWeek)) {
let str = startYear + "-" + i
let show = this.weekToDate(startYear,i,5)
weeks.push({
weeks: str,
show: show
});
weekCol.push(str)
}
}
startYear++
}
}
this.form.weekCol = weekCol
return weeks
},