日期选择器el-date-picker选择周、月、年

 <el-date-picker
            v-if="isTimeType==='date'"
            :clearable="false"
            value-format="yyyy-MM-dd"
            start-placeholder="开始日期"
            end-placeholder="结束日期"
            v-model="date"
            type="daterange"
            :picker-options="{disabledDate:dateOptions,pickerOptions}"
            @change="changeData(date)"
          >
          </el-date-picker>
          <div class="date-picker" v-if="isTimeType==='week'">
            <el-date-picker
              v-model="date"
              type="week"
              format="yyyy 第 WW 周"
              placeholder="选择周"
              @change="handleWeekChange"
              :picker-options="{disabledDate:dateOptions,firstDayOfWeek: 1}"
            ></el-date-picker>
            <div class="date-range">{{ weekRange }}</div>
          </div>
          <div class="date-picker" v-if="isTimeType==='month'">
            <el-date-picker
              v-model="date"
              type="month"
              format="yyyy - MM"
              placeholder="选择月份"
              @change="handleMonthChange"
              :pickerOptions="{disabledDate:dateOptions}"
            ></el-date-picker>
            <div class="date-range">{{ timeRange }}</div>
          </div>
          <div class="date-picker" v-if="isTimeType==='year'">
            <el-date-picker
              v-model="date"
              type="year"
              format="yyyy"
              placeholder="选择年份"
              :pickerOptions="{disabledDate:dateOptions}"
              @change="getYearRange"
            ></el-date-picker> 

export default {
data(){
    return{
        date: '',
        startDate: '',
        endDate: '',
    }

}
method:{

// 周选择器
    handleWeekChange(value) {
      if (value) {
        console.log(value)
        // 获取周的第一天(周一)
        const weekStart = new Date(value)
        const dayOfWeek = weekStart.getDay() // 周日是0,周一是1,...
        // 如果周的第一天不是周一,则回退到上一周的周一
        if (dayOfWeek !== 1) {
          weekStart.setDate(weekStart.getDate() - dayOfWeek + 1)
        }

        // 计算周的最后一天(周日)
        const weekEnd = new Date(weekStart)
        weekEnd.setDate(weekEnd.getDate() + 6)

        // 存储周的开始和结束日期
        this.startDate = weekStart
        this.endDate = weekEnd
        this.sonData.startDate = this.formatDate(this.startDate)
        this.sonData.endDate = this.formatDate(this.endDate)

        // console.log('this.endDate',this.formatDate(this.endDate))
      }
    },
    // 月选择器获取月份日期范围
    handleMonthChange(value) {
      // 确保value是一个有效的Date对象
      if (value) {
        // 获取月份的第一天
        const firstDay = new Date(value.getFullYear(), value.getMonth(), 1)

        // 获取下一个月的第一天
        const nextMonthFirstDay = new Date(value.getFullYear(), value.getMonth() + 1, 1)

        // 获取当前月份的最后一天(即下一个月第一天的前一天)
        const lastDay = new Date(nextMonthFirstDay - 86400000) // 一天有86400000毫秒

        // 更新组件数据
        this.startDate = this.formatDate(firstDay)
        this.endDate = this.formatDate(lastDay)
        this.timeRange = this.startDate + ' 至 ' + this.endDate
        this.sonData.startDate = this.startDate
        this.sonData.endDate = this.endDate
      }
    },
    // 年选择器
    getYearRange(value) {
      // 确保value是一个有效的Date对象
      if (value) {
        this.startDate = ''
        this.endDate = ''
        // 获取年份的第一天(1月1日)
        const firstDay = new Date(value.getFullYear(), 0, 1) // 月份从0开始,0代表1月

        // 获取年份的最后一天(12月31日)
        const lastDay = new Date(value.getFullYear(), 11, 31, 23, 59, 59, 999) // 月份从0开始,11代表12月

        // 更新组件数据
        this.startDate = this.formatDate(firstDay)
        this.endDate = this.formatDate(lastDay)
        this.timeRange = this.startDate + ' 至 ' + this.endDate
        this.sonData.startDate = this.startDate
        this.sonData.endDate = this.endDate
      }

    },
    // 辅助函数:格式化日期为 "YYYY-MM-DD"
    formatDate(date) {
      const year = date.getFullYear()
      const month = (date.getMonth() + 1).toString().padStart(2, '0') // 填充前导零
      const day = date.getDate().toString().padStart(2, '0') // 填充前导零
      return `${year}-${month}-${day}`
    },


  }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值