vue使用element中的el-date-picker实现每月的第几周

vue使用element中的el-date-picker实现每月的第几周

最近写的项目里面有一个功能是实现选择周的(如图 1),第一反应是使用element里面的el-date-picker组件,但是有一个问题,就是el-date-picker的周选择组件是一整年的第几周(如图 2),而不是每个月的第几周,然后就去查了一下,发现element里面也没有实现选择每个月的第几周的,那么只能自己改了。

图 1

在这里插入图片描述

图 2

在这里插入图片描述
  1. 首先我们要把el-date-picker里面显示改为图1所示的样子
  2. 结构有了就要实现功能了,简单点想就是点击选择日期的时候根据选中的日期来判断是这个月的第几周,然后修改选择框的内容。
  3. 加上默认显示值,需要获取当天的年月日以及对应月的第几周来实现

实现如下代码所示:

<template>
  <div class="test-box">
    <span>每周</span>
    <el-date-picker
      :clearable="false"
      v-model="queryParam.value"
      :format="'yyyy-MM 第' + queryParam.week + '周'"
      @change="weekChange"
      value-format="yyyy-M-d"
      class="inp"
      size="medium"
      type="week"
      placeholder="请选择"
      :picker-options="{'firstDayOfWeek': 1}"
    ></el-date-picker>
  </div>
</template>

<script>
export default {
  data() {
    return {
      queryParam: {
        value: '',
        week: ''
      }
    };
  },
  created() {
    this.getDay();
  },
  methods: {
    // 初始化日期
    getDay() {
      var date = new Date();
      var year = date.getFullYear();
      var month = date.getMonth() + 1;
      var day = date.getDate();
      if (month < 10) {
        month = '0' + month;
      }
      if (day < 10) {
        day = '0' + day;
      }
      let nowDay = year + '-' + month + '-' + day;
      this.queryParam.week = this.getWeekInMonth(new Date(nowDay));
      this.queryParam.value = year + '-' + month + '-' + day;
    },
    weekChange(val) {
      if (val) {
        let arr = val.split('-');
        this.queryParam.week = this.getWeekInMonth(new Date(val));
      }
    },
    // 根据日期判断是月的第几周
    getWeekInMonth(t) {
      if (t == undefined || t == '' || t == null) {
        t = new Date();
      } else {
        var _t = new Date();
        _t.setYear(t.getFullYear());
        _t.setMonth(t.getMonth());
        _t.setDate(t.getDate());

        var date = _t.getDate(); //给定的日期是几号

        _t.setDate(1);
        var d = _t.getDay(); //1. 得到当前的1号是星期几。
        var fisrtWeekend = d;
        if (d == 0) {
          fisrtWeekend = 1;
          //1号就是星期天
        } else {
          fisrtWeekend = 7 - d + 1; //第一周的周未是几号
        }
        if (date <= fisrtWeekend) {
          return 1;
        } else {
          return 1 + Math.ceil((date - fisrtWeekend) / 7);
        }
      }
    }
  }
};
</script>

<style lang="less" scoped="scoped">
.test-box {
  background: #ffffff;
  height: 31.25rem;
  padding: 1.875rem 0 0 1.875rem;
  .inp {
    margin: 0 0 0 0.625rem;
  }
}
</style>

最终效果如下图所示:
在这里插入图片描述
好了,今天就分享到这里,我们下次见,see you…

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值