element ui 制作带自定义的快捷选项的日期选择器

  • Post author:
  • Post category:其他


一.需求

1.1 需要在日期选择器上设置快捷选项,快捷选项需要有今天、昨天、近7天、近30天、近90天、近180天、近一年、本周、本月、本季度、本年这些选项

1.2 这些快捷键需要的是相对时间的概念;而且得按照产品要求的来自定义快捷选项具体的内容 ; 如:产品定义的近7天即,当天-7天 到 当天-1天 ,依次类推;本周即,当天对应的这周的周一 到 当天-1;本月即,当天对应的这个月的第一天 到 当天-1;本季度即,当天对应的这个季度第一个月的第一天 到当天-1

二.效果

在这里插入图片描述

三.代码和注释如下

3.1给日期选择器el-date-picker标签添加picker-options属性,传入变量pickerOptions

<el-date-picker //日期选择器
    v-model="createForm.timeCycle" //双向绑定一个value值
    type="datetimerange" // 时间选择器的类型
    :picker-options="pickerOptions" //绑定一个变量获取到快捷键
    range-separator="至" // 日期选择器上开始和结束时间中间的文字
    start-placeholder="开始日期"
    end-placeholder="结束日期"
    value-format="yyyy-MM-dd"//value值的格式
>
</el-date-picker>

3.2日期选择器绑定变量timeCycle

<script>
export default {
    data(){
      return {
        createForm: {
          timeCycle:[]
        }
      }
    }
}
</script>

3.3给pickerOptions变量设置shortcuts属性

export default {
    data(){
      return {
        createForm: {
          timeCycle:[]
        },
        pickerOptions: {
          shortcuts: [{
            text: '今天',
            onClick(picker) {
              picker.$emit('pick', [new Date(), new Date()]);
            }
          }, {
            text: '昨天',
            onClick(picker) {
              const date = new Date();
              date.setTime(date.getTime() - 3600 * 1000 * 24);
              picker.$emit('pick', [date,date]);
            }
          }, 
            {
            text: '近7天',
            onClick(picker) {
              const end = new Date();
              const start = new Date();
              end.setTime(start.getTime() - 3600 * 1000 * 24 )
              start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
              picker.$emit('pick', [start, end]);
            }
          }, {
            text: '近30天',
            onClick(picker) {
              const end = new Date();
              const start = new Date();
              end.setTime(start.getTime() - 3600 * 1000 * 24 )
              start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
              picker.$emit('pick', [start, end]);
            }
          }, {
            text: '近90天',
            onClick(picker) {
              const end = new Date();
              const start = new Date();
              end.setTime(start.getTime() - 3600 * 1000 * 24 )
              start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
              picker.$emit('pick', [start, end]);
            },
          },
           {
            text: '近180天',
            onClick(picker) {
              const end = new Date();
              const start = new Date();
              end.setTime(start.getTime() - 3600 * 1000 * 24 )
              start.setTime(start.getTime() - 3600 * 1000 * 24 * 180);
              picker.$emit('pick', [start, end]);
            },
          },
          {
            text: '近一年',
            onClick(picker) {
              const end = new Date();
              const start = new Date();
              end.setTime(start.getTime() - 3600 * 1000 * 24 )
              start.setTime(start.getTime() - 3600 * 1000 * 24 * 365);
              picker.$emit('pick', [start, end]);
            },
          },
          {text: '本周',
              onClick(picker) {
                 const end = new Date();
                 const start = new Date();
                 end.setTime(start.getTime() - 3600 * 1000 * 24 )
                 //现在星期几;0代表星期天,6代表星期六
                 var thisDay = start.getDay();
                 //现在是一个月的第几天
                 var thisDate = start.getDate();
                 console.log(thisDay)
                 console.log(thisDate)
                 if (thisDay != 0) {
                     start.setDate(thisDate - thisDay+1);
                 }
                   picker.$emit('pick', [start, end]);
              }
           },
           {
              text: '本月',
              onClick(picker) {
                  const end = new Date();
                  const start = new Date();
                  end.setTime(start.getTime() - 3600 * 1000 * 24 )
                  start.setDate(1);
                  picker.$emit('pick', [start, end]);
              }
            },
            {
              text: '本季度',
              onClick(picker) {
                  var oDate = new Date();
                  var thisYear = oDate.getFullYear();
                  var thisMonth = oDate.getMonth() + 1;
                  var n = Math.ceil(thisMonth / 3); // 季度
                  var Month = n * 3 - 1;
                  var start = new Date(thisYear, Month - 2, 1);
                  var end = new Date();
                  end.setTime(end.getTime() - 3600 * 1000 * 24 )
                  picker.$emit('pick', [start, end]);
            }
          },
          {
              text: '本年',
              onClick(picker) {
                  const end = new Date();
                  const start = new Date();
                  start.setMonth(0);
                  start.setDate(1);
                  end.setTime(end.getTime() - 3600 * 1000 * 24 )
                  picker.$emit('pick', [start, end]);
              }
          }, 
          ]
        },
      }
    }
}



版权声明:本文为weixin_54351962原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。