Javascript 我该如何安排那些不属于';在我的Vue日历组件中,当前月份的t是否不同?
编辑:我猜问题出在“下课”规则中,但还不能解决 我正在尝试修复我的公司vue日历组件。 我没有这样做,只是在系统中进行维护,发现了这种奇怪的行为 此日历组件中的当前规则使其不显示2021个月,直到“第一个”(从左侧开始)也是2021个月。也许11月的空行可能与IDK有关。 (我试图撤回我认为与月/年关系不直接相关的所有内容,但如有必要,我可以编辑) 谁能帮帮我吗?:)Javascript 我该如何安排那些不属于';在我的Vue日历组件中,当前月份的t是否不同?,javascript,html,css,vue.js,Javascript,Html,Css,Vue.js,编辑:我猜问题出在“下课”规则中,但还不能解决 我正在尝试修复我的公司vue日历组件。 我没有这样做,只是在系统中进行维护,发现了这种奇怪的行为 此日历组件中的当前规则使其不显示2021个月,直到“第一个”(从左侧开始)也是2021个月。也许11月的空行可能与IDK有关。 (我试图撤回我认为与月/年关系不直接相关的所有内容,但如有必要,我可以编辑) 谁能帮帮我吗?:) //模板 {{date.getDate()} //脚本 日历(索引){ 让add=索引-1; 让月=本月+加; 让year
//模板
{{date.getDate()}
//脚本
日历(索引){
让add=索引-1;
让月=本月+加;
让year=this.currentMonthDate.getFullYear();
第一天=新日期(年,月-1,1);
设lastMonth=firstDay.getMonth()-1;
let daysInLastMonth=新日期(年,月-1,0).getDate();
让dayOfWeek=firstDay.getDay();
让日历=[];
for(设i=0;i<6;i++){
日历[i]=[];
}
让startDay=daysInLastMonth—dayOfWeek+1;
如果(startDay>daysInLastMonth)startDay-=7;
设curDate=新日期(年、上月、开始日期、12、0、0);
为了(
设i=0,col=0,row=0;
i<6*7;
i++,col++,curDate.setDate(curDate.getDate()+1)
) {
如果(i>0&&col%7==0){
col=0;
行++;
}
日历[行][列]=新日期(curDate.getTime());
}
返回日历;
},
dayClass(日期、索引){
让add=索引-1;
设dt=新日期(日期);
dt.设定小时数(0,0,0,0);
开始=新日期();
让结束=新日期();
let in_range=false;
让索引\范围\日期=0;
this.dateRanges.forEach((r,index)=>{
if(r.start和r.end){
设startAux=新日期(r.开始);
startAux.setHours(0,0,0,0);
设endAux=新日期(r.end);
endAux.setHours(0,0,0,0);
如果(dt>=startAux&&dt如果你不想让它们出现,就不要把它们放在第一位,也就是说,如果curDate.getMonth()!==month
setcalendar[row][col=null
或其他,那么在您的组件HTML中,很可能使用v-if来处理此情况-您没有显示组件的HTML部分,因此,我个人无能为力,我认为您的逻辑有点缺陷…为什么在11月的10月有整整一周,整整7天?还有year+=(this.month+add)%12;
看起来有问题……我想如果第一个月是2020年12月,你会在2021年1月结束,然后是2022年2月。你知道,新日期(2020,12,1)
会给你2021年1月1日?和新日期(2020,13,1)
这是2021年2月1日吗?这一知识有助于消除你大部分的焦虑code@Bravo我在系统中找到了这个组件的另一个版本。也许现在更容易使它正常工作。请你再看一下好吗?
//template
<tr v-for="(dateRow, index) in calendar(mes)" :key="index">
<slot name="date-slot" v-for="(date, idx) in dateRow">
<td
:class="dayClass(date, mes)"
@click="dateClick(date)"
@mouseover="hoverDate(date)"
:key="`${idx}-${mes}`"
>
<p>{{ date.getDate() }}</p>
</td>
</slot>
</tr>
//script
calendar(index) {
let add = index - 1;
let month = this.month + add;
let year = this.currentMonthDate.getFullYear();
let firstDay = new Date(year, month - 1, 1);
let lastMonth = firstDay.getMonth() - 1;
let daysInLastMonth = new Date(year, month - 1, 0).getDate();
let dayOfWeek = firstDay.getDay();
let calendar = [];
for (let i = 0; i < 6; i++) {
calendar[i] = [];
}
let startDay = daysInLastMonth - dayOfWeek + 1;
if (startDay > daysInLastMonth) startDay -= 7;
let curDate = new Date(year, lastMonth, startDay, 12, 0, 0);
for (
let i = 0, col = 0, row = 0;
i < 6 * 7;
i++, col++, curDate.setDate(curDate.getDate() + 1)
) {
if (i > 0 && col % 7 === 0) {
col = 0;
row++;
}
calendar[row][col] = new Date(curDate.getTime());
}
return calendar;
},
dayClass(date, index) {
let add = index - 1;
let dt = new Date(date);
dt.setHours(0, 0, 0, 0);
let start = new Date();
let end = new Date();
let in_range = false;
let index_range_date = 0;
this.dateRanges.forEach((r, index) => {
if (r.start && r.end) {
let startAux = new Date(r.start);
startAux.setHours(0, 0, 0, 0);
let endAux = new Date(r.end);
endAux.setHours(0, 0, 0, 0);
if (dt >= startAux && dt <= endAux) {
in_range = true;
index_range_date = index;
start = startAux;
start.setHours(0, 0, 0, 0);
end = endAux;
end.setHours(0, 0, 0, 0);
}
}
});
let classes = {
off: dt.getMonth() + 1 !== this.month + add,
weekend: date.getDay() === 6 || date.getDay() === 0,
today: dt.setHours(0, 0, 0, 0) == new Date().setHours(0, 0, 0, 0),
active:
dt.setHours(0, 0, 0, 0) == new Date(this.start).setHours(0, 0, 0, 0) ||
dt.setHours(0, 0, 0, 0) == new Date(this.end).setHours(0, 0, 0, 0),
"start-date": dt.getTime() === start.getTime(),
"end-date": dt.getTime() === end.getTime()
// 'disabled': dt <= new Date()
};
classes["in-range-" + index_range_date.toString()] = in_range;
classes["hover-" + this.empty_range.toString()] = true;
return classes;
},
checkYear() {
if (this.$refs.yearSelect !== document.activeElement) {
this.$nextTick(() => {
this.year_text = this.currentMonthDate.getFullYear();
});
}
},