公司的两个vue项目中都用到了iview和element这个框架,最近的两个需求都有关于日期选择的定制控件,就是要求日期选择的快捷选项左边栏有包含今日、昨日、本周、上周、最近一周、本月、上月、上季度、本季度、去年、今年,由于element官网中对于这样的快捷选项并不是很好,满足不了实际的场景需要,所以就要自己定制开发。上网查了一些文档,根据实际需求定制了如下的控件,由于iview和element类似,下面只介绍element框架,iview也可以直接套用。如果你的需求和我的类似,直接就可以拷贝,按照步骤操作即可实现。

  • 第一步:安装moment

moment.js是一个非常实用的JS日期工具类,例如对日期获取,格式化等操作都很方便,如果想进一步了解,可参考官网,地址如下:

官网地址:Moment.js 中文网

  • 第二步:在需要的日期页面中引入  
import moment from "moment";
  • 第三步:在属性 options 对象中的 shortcuts 可以设置快捷选项。  

注意:如果你的需求要求传递时分秒的话就把 HH:mm:ss 加上,如果仅仅是需要传递年月日,就直接删除  HH:mm:ss 即可。

      pickerOptions: {
shortcuts: [{
text: '今日',
onClick(picker) {
const end = new Date();
const start = new Date();
picker.$emit('pick', [start, end])
}
}, {
text: '昨日',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24)
end.setTime(end.getTime() - 3600 * 1000 * 24)
picker.$emit('pick', [start, end])
}
}, {
text: '上周',
onClick(picker) {
const start = moment(moment().week(moment().week() - 1).startOf('week').add(1, 'days').valueOf()).format("YYYY-MM-DD HH:mm:ss")
const end = moment(moment().week(moment().week() - 1).endOf('week').add(1, 'days').valueOf()).format("YYYY-MM-DD HH:mm:ss");
picker.$emit('pick', [start, end])
}
}, {
text: '本周',
onClick(picker) {
const start = moment(moment().week(moment().week()).startOf('week').add(1, 'days').valueOf()).format("YYYY-MM-DD HH:mm:ss")
const end = moment(moment().week(moment().week()).endOf('week').add(1, 'days').valueOf()).format("YYYY-MM-DD HH:mm:ss");
picker.$emit('pick', [start, end])
}
}, {
text: '上月',
onClick(picker) {
const start = moment(moment().month(moment().month() - 1).startOf('month').valueOf()).format('YYYY-MM-DD');
const end = moment(moment().month(moment().month() - 1).endOf('month').valueOf()).format('YYYY-MM-DD');
picker.$emit('pick', [start, end])
}
}, {
text: '本月',
onClick(picker) {
const start = moment(moment().month(moment().month()).startOf('month').valueOf()).format('YYYY-MM-DD');
const end = moment(moment().month(moment().month()).endOf('month').valueOf()).format('YYYY-MM-DD');
picker.$emit('pick', [start, end])
}
}, {
text: '最近一周',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
picker.$emit('pick', [start, end])
}
}, {
text: '最近一月',
onClick(picker) {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
picker.$emit('pick', [start, end])
}
}, {
text: '上季度',
onClick(picker) {
const start = moment(moment().quarter(moment().quarter() - 1).startOf('quarter').valueOf()).format('YYYY-MM-DD');
const end = moment(moment().quarter(moment().quarter() - 1).endOf('quarter').valueOf()).format('YYYY-MM-DD');
picker.$emit('pick', [start, end])
}
}, {
text: '本季度',
onClick(picker) {
const start = moment(moment().quarter(moment().quarter()).startOf('quarter').valueOf()).format('YYYY-MM-DD');
const end = moment(moment().quarter(moment().quarter()).endOf('quarter').valueOf()).format('YYYY-MM-DD');
picker.$emit('pick', [start, end])
}
}, {
text: '去年',
onClick(picker) {
const start = moment(moment().year(moment().year() - 1).startOf('year').valueOf()).format('YYYY-MM-DD');
const end = moment(moment().year(moment().year() - 1).endOf('year').valueOf()).format('YYYY-MM-DD');
picker.$emit('pick', [start, end])
}
}, {
text: '今年',
onClick(picker) {
const start = moment(moment().year(moment().year()).startOf('year').valueOf()).format('YYYY-MM-DD');
const end = moment(moment().year(moment().year()).endOf('year').valueOf()).format('YYYY-MM-DD');
picker.$emit('pick', [start, end])
}
}]
}
  • 第四步:HTML中的代码写日期组件,下面可以直接拿来使用,如下:
        <el-col :span="16">
<el-date-picker
v-model="timeValue"
type="daterange"
align="right"
unlink-panels
size="small"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
@change="selectDate"
:picker-options="pickerOptions">
</el-date-picker>
</el-col>

第五步:在使用之前可以先在控制台打印出来,看是否符合自己的实际需求,如下:

   selectDate(date) {
    console.log(date[0]) // 开始时间
    console.log(data[1]) // 结束时间
  }

这些是element框架中使用的,iview框架同理,套用即可。

以上是我在实际开发中遇到的问题,希望看到这篇文章的小伙伴可以得到收获,有兴趣可以关注我,互相学习。

有问题也可留言,我会及时处理回答,谢谢。

原创不易,多谢支持!

iview和element中日期选择器快捷选项的定制控件的更多相关文章

  1. 使用element ui 日期选择器获取值后的格式问题

    一般情况下,我们需要给后台的时间格式是: "yyyy-MM-dd" 但是使用Element ui日期选择器获取的值是这样的: Fri Sep :: GMT+ (中国标准时间) 在官 ...

  2. winform中button点击后再点击其他控件致使button失去焦点,此时button出现黑色边线,去掉黑色边线的方法

    winform中button点击后再点击其他控件致使button失去焦点,此时button出现黑色边线,去掉黑色边线的方法 button的FlatAppearence属性下,设置BorderSize= ...

  3. MVC中使用HTML Helper类扩展HTML控件

    文章摘自:http://www.cnblogs.com/zhangziqiu/archive/2009/03/18/1415005.html MVC在view页面,经常需要用到很多封装好的HTML控件 ...

  4. 在ASP.NET中动态加载内容(用户控件和模板)

    在ASP.NET中动态加载内容(用户控件和模板) 要点: 1. 使用Page.ParseControl 2. 使用base.LoadControl 第一部分:加载模板 下 面是一个模板“<tab ...

  5. c#中如何跨线程调用windows窗体控件

    c#中如何跨线程调用windows窗体控件?   我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来做这个问题,下面我将详细的介绍.首 ...

  6. 安卓中的事件分发机制之View控件

    前言:Android 中与 Touch 事件相关的方法包括:dispatchTouchEvent(MotionEvent ev).onInterceptTouchEvent(MotionEvent e ...

  7. ASP.NET中共有哪几种类型的控件?其中,HTML控件、HTML服务器控件和WEB服务器控件之间有什么区别

    ASP.NET的控件包括WEB服务器控件.WEB用户控件.WEB自定义控件.HTML服务器控件和HTML控件.HTML控件.HTML服务器控件和WEB服务器控件之间的区别如下所示.q      HTM ...

  8. WPF Prism MVVM 中 弹出新窗体. 放入用户控件

    原文:WPF Prism MVVM 中 弹出新窗体. 放入用户控件 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_37214567/artic ...

  9. Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)

    原文:Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定) ------------------------------ ...

随机推荐

  1. 解决chrome浏览器崩溃,再次安装不上问题

    上网重新下载了个安装包,发现安装包都打不来 很绝望,查了很多资料 很多人说要删除注册表的东西 但是打开注册表,发现一堆google的东西,手动删根本不现实 在绝望中看到了解决方案:google Upd ...

  2. 基于 VMware 的超融合, 解析 vSAN 与 SmartX ZBS 的优劣差异

    在企业级IT领域从业多年,最近越来越多地听到圈内人谈论起超融合技术的种种好处.的确,超融合技术已越来越走向成熟,带来的价值也逐渐凸显.它可靠性高,资源消耗低,尤其是运维部署非常便捷.在企业基础架构领域 ...

  3. .Net轻量状态机Stateless

    很多业务系统开发中,不可避免的会出现状态变化,通常采用的情形可能是使用工作流去完成,但是对于简单场景下,用工作流有点大财小用感觉,比如订单业务中,订单状态的变更,涉及到的状态量不是很多,即使通过简单的 ...

  4. scp建立安全信任关系

    1. 在机器Client上root用户执行ssh-keygen命令,生成建立安全信任关系的证书. [root@Client root]# ssh-keygen -b 1024 -t rsa Gener ...

  5. C# 代码往oracle数据库添加datetime格式列

    C# 代码往oracle数据库添加datetime格式列时,不需要在insert语句中为datetime类型使用to_date函数

  6. vue中关于滚动条的那点事

    vue中关于滚动条的那点事 不知道你有没有遇到过这种情况,有时当页面切换时,滚动条不在页面的顶端.最近半路加入一个项目,就遇到这种情况.(若只是为了解决此问题,可直接翻到最下方)下面谈谈解决此问题的过 ...

  7. 阿里云搭建nginx + uWSGI 实现 django 项目

    系统版本 CentOS/7 64位 1.安装使用python3 创建python3目录 sudo mkdir /usr/local/python3 进入python3目录 cd /usr/local/ ...

  8. electron教程(一): electron的安装和项目的创建

    我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(二): http服务器, ws服务器, 进程管理 electron教程(三): 使 ...

  9. 23种设计模式之原型模式(Prototype Pattern)

    原型模式 使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象 分析: 孙悟空:根据自己的形状复制(克隆)出多个身外身 软件开发:通过复制一个原型对象得到多个与原型对象一模一样的新对象 ...

  10. Spring 梳理 - javaConfig在App和webApp中的应用

    package com.dxz.demo.configuration; import org.springframework.context.annotation.Configuration; @Co ...