Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我该如何安排那些不属于';在我的Vue日历组件中,当前月份的t是否不同?_Javascript_Html_Css_Vue.js - Fatal编程技术网

Javascript 我该如何安排那些不属于';在我的Vue日历组件中,当前月份的t是否不同?

Javascript 我该如何安排那些不属于';在我的Vue日历组件中,当前月份的t是否不同?,javascript,html,css,vue.js,Javascript,Html,Css,Vue.js,编辑:我猜问题出在“下课”规则中,但还不能解决 我正在尝试修复我的公司vue日历组件。 我没有这样做,只是在系统中进行维护,发现了这种奇怪的行为 此日历组件中的当前规则使其不显示2021个月,直到“第一个”(从左侧开始)也是2021个月。也许11月的空行可能与IDK有关。 (我试图撤回我认为与月/年关系不直接相关的所有内容,但如有必要,我可以编辑) 谁能帮帮我吗?:) //模板 {{date.getDate()} //脚本 日历(索引){ 让add=索引-1; 让月=本月+加; 让year

编辑:我猜问题出在“下课”规则中,但还不能解决

我正在尝试修复我的公司vue日历组件。 我没有这样做,只是在系统中进行维护,发现了这种奇怪的行为

此日历组件中的当前规则使其不显示2021个月,直到“第一个”(从左侧开始)也是2021个月。也许11月的空行可能与IDK有关。 (我试图撤回我认为与月/年关系不直接相关的所有内容,但如有必要,我可以编辑)

谁能帮帮我吗?:)

//模板
{{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
set
calendar[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();
        });
      }
    },