element选择周日期不跨月

选择任意一天,自动返回所在周的起始日期,起始日期不跨月
1.使用element日期选择器组件
2.需要安装依赖 - moment

<template>
  <div class="app-container" style=" height: 100% " ref="appContainer">
    <el-date-picker :firstDayOfWeek='1' v-model="weekInfo.data" type="date" :format="yyyy-MM-dd" placeholder="选择周" style="width:250px" size="samll"
      @change='changeWeek' :clearable='false' :editable='false' :picker-options="pickerOptionsOfWeek">
    </el-date-picker>
  </div>
</template>

<script>
export default {
  name: "weeklyPlanQuery",
  data() {
    return {
      weekInfo: {
        data: "",
        weekStartDay: "",
        weekEndDay: "",
        showInfo: null,
        dataList: [],
      },
      pickerOptionsOfWeek: {
        // 自定义周选择器配置
        firstDayOfWeek: 1,
        cellClassName: (time) => {
          let timeDate = this.$moment(time.getTime()).format("yyyy-MM-DD");
          let list = this.weekInfo.dataList;
          if (list.includes(timeDate)) {
            if (timeDate == list[0]) {
              return "in-range start-date"; // 开始日期
            } else if (timeDate == list[list.length - 1]) {
              return "in-range end-date"; // 结束日期
            } else {
              return "in-range"; // 中间日期
            }
          }
        },
      },
    };
  },
  created() {
    this.changeWeek(nextWeek);
  },
  methods: {
    // 选择日期
    changeWeek(e) {
      this.changeWeekOfMonth(e).then((res) => {
        this.weekInfo = res;
        this.queryParams.planDate = res.weekStartDay;
        this.queryParams.planStartDate = res.weekStartDay;
        this.queryParams.planEndDate = res.weekEndDay;
      });
    },
    // 根据所选日期计算所在周起始时间
    changeWeekOfMonth(e) {
      let chooseTime = this.dateFormat(e).split("-");
      let weekOfDay = this.$moment(e).format("E"); // 所选日期是周几
      let day = this.$moment(e).format("DD"); // 所选日期天
      let totalDay = new Date(chooseTime[0], chooseTime[1], 0).getDate(); // 所选日期所在月的总天数
      let mondayNum = weekOfDay - 1;
      let sundayNum = 7 - weekOfDay;
      if (weekOfDay - day > 0) {
        mondayNum = day - 1;
      }
      if (totalDay - day < sundayNum) {
        sundayNum = totalDay - day;
      }
      let chooseFirstDay = this.$moment(e)
        .subtract(mondayNum, "days")
        .format("YYYY-MM-DD");
      let chooseLastDay = this.$moment(e)
        .add(sundayNum, "days")
        .format("YYYY-MM-DD");
      let weekInfo = {
        data: this.dateFormat(e),
        showInfo: chooseFirstDay + " 至 " + chooseLastDay,
        weekStartDay: chooseFirstDay,
        weekEndDay: chooseLastDay,
        dataList: this.formatEveryDay(chooseFirstDay, chooseLastDay),
      };
      return new Promise((resolve, reject) => {
        resolve(weekInfo);
      });
    },
    formatEveryDay(start, end) {
      let dateList = [];
      var startTime = this.getDateFun(start);
      var endTime = this.getDateFun(end);
      while (endTime.getTime() - startTime.getTime() >= 0) {
        var year = startTime.getFullYear();
        var month =
          startTime.getMonth() + 1 < 10
            ? "0" + (startTime.getMonth() + 1)
            : startTime.getMonth() + 1;
        var day =
          startTime.getDate().toString().length == 1
            ? "0" + startTime.getDate()
            : startTime.getDate();
        dateList.push(year + "-" + month + "-" + day);
        startTime.setDate(startTime.getDate() + 1);
      }
      return dateList;
    },
  },
};
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值