点击下拉出几个选项,根据日期不同来过滤数据。看图--(忽略小梨子,这是日常练手页面)

(element ui)

点击today-当天日期

点击last three days

点击custom,并且实现右侧结束日期必须大于左侧(左边先选,右边无法选择比左边小的)

首先呢--先弄它个按钮下拉玩玩,,下拉数据v-for遍历,

@click.native="filterTime(menu)" 
根据interval不同来判断不同时间段(在data--menus中)
<el-dropdown size="small" trigger="click">
<el-button type="primary">
paid Time<i class="el-icon-arrow-down el-icon--right" />
</el-button>
<el-dropdown-menu>
<el-dropdown-item v-for="menu in menus" @click.native="filterTime(menu)">
{{ menu.title }}
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>

获取到的日期渲染到页面上--

   <span v-if="timeData">
<el-tag
color="white"
style="font-size: 15px;"
>
{{ timeData }}
</el-tag>
</span>

日期选择是点击弹出个弹窗,在弹窗中选择。,

:picker-options="pickerOptionsStart"   
:picker-options="pickerOptionsEnd"  
在data中判定起止时间大于的问题
<el-dialog title="Choice Time" :visible.sync="dialogVisible" width="40%">
<div style="padding-top: 10px;" :data="timePo">
<el-date-picker
v-model="start"
type="date"
value-format="yyyy-MM-dd"
placeholder="Choose the date and time"
:picker-options="pickerOptionsStart"
style="margin-right: 10px;"
@change="startTimeStatus"
/>
to
<el-date-picker
v-model="end"
type="date"
value-format="yyyy-MM-dd"
placeholder="Choose the date and time"
:picker-options="pickerOptionsEnd"
style="margin-left: 10px;"
@change="endTimeStatus"
/>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="cancel">cancel</el-button>
<el-button type="primary" @click="saveTime">submit</el-button>
</div>
</el-dialog>

下面是一些数据,start是开始日期,end是结束日期。menus为下拉框中数据。

data() {
return {
start: '',
end: '',
dialogVisible: false,
timeData: '',
menus: [
{ title: 'today', interval: 0 },
{ title: 'yesterday', interval: 1 },
{ title: 'Last Three Days', interval: 2 },
{ title: 'one Week', interval: 6 },
{ title: 'custom', interval: -1 }
],
pickerOptionsStart: {
disabledDate: time => {
const endDateVal = this.end
if (endDateVal) {
return time.getTime() > new Date(endDateVal).getTime()
}
}
},
pickerOptionsEnd: {
disabledDate: time => {
const beginDateVal = this.start
if (beginDateVal) {
return time.getTime() < new Date(beginDateVal).getTime()
}
}
}
}
},

在methods中 ,,年+月+日,简单的获取和赋值,调用:时间戳转换成  xxxx-xx-xx格式。

            timeFormat(date) {
const year = date.getFullYear()
let month = (date.getMonth() + 1) + ''
month = month.length === 1 ? '0' + month : month
let day = date.getDate() + ''
day = day.length === 1 ? '0' + day : day
return year + '-' + month + '-' + day
},

根据前面说的来判定。timePo是后台提供的字段,获取到的start,end日期通过props传值,后台来进行过滤。

if对比不等于 -1 ,不等于的话  获取当天时间定义为end,减去选择的天数是start。endStr和startStr是转换格式后的日期。

filterTime(menu) {
const interval = menu.interval
if (interval !== -1) {
const end = new Date()
const time = end.getTime() - interval * 24 * 60 * 60 * 1000
const start = new Date(time)
const endStr = this.timeFormat(end)
const startStr = this.timeFormat(start)
this.timePo = Object.assign(this.timePo,
{
field: 'updated_at',
start: startStr + this.split + '00:00:00',
end: endStr + this.split + '23:59:59'
这里为啥这样呢,是因为在过滤的时候没加这些,有部分订单是不显示的(俺也不知道具体为啥)
}
)
this.timeData = startStr + ' => ' + endStr
this.fatherInit()
} else {
this.start = ''
this.end = ''
this.dialogVisible = true
}
},

下面是弹窗中日期的赋值,。

 // 弹窗赋值
saveTime() {
this.timeData = this.start + ' => ' + this.end
this.dialogVisible = false
this.timePo = Object.assign(this.timePo,
{
field: 'updated_at',
start: this.start + this.split + '00:00:00',
end: this.end + this.split + '23:59:59'
}
)
this.fatherInit()
},
cancel() {
this.dialogVisible = false
},
// 时间开始选择器
startTimeStatus: function(value) {
this.start = value
},
// 时间结束选择器
endTimeStatus: function(value) {
this.end = value
}
}

over。

vue框架中实现今天昨天前天最近时间的更多相关文章

  1. 如何在vue框架中兼容IE

    IE目前已经放弃了自己的独特化,正一步步迎入互联网的主流怀抱.但迫于有用户存在,还是要兼容到IE8,9, 以上. 下面聊一下如何在vue框架中兼容IE 1.首先在index.html <meta ...

  2. vue框架中props的typescript用法

    vue框架中props的typescript用法 在vue中使用typescript时,需要引入vue-property-decorator库来兼容格式. javascript写法 Vue.compo ...

  3. vue框架中的日期组件转换为yyy-mm-dd格式

    最近在用vue框架写一个app,这个是用到的日期格式转换,把下面的标准格式转换为字符串连接格式

  4. yarn 在Vue框架中的常用命令

    初始化项目 yarn add init 安装vue yarn add vue 安装webpack,webpack-dev-server(是一个小型的Node.js Express服务器) yarn a ...

  5. 在Vue框架中使用百度地图

    1.首先在index.html中引入百度地图 <script type="text/javascript" src="http://api.map.baidu.co ...

  6. Vue 框架中遇到的诀窍

    问题一. 我需要渲染数组A,并根据 B数组中是否存在A中,给A添加 选中状态sel. 经过很焦虑的研究后,寻求帮助得到答案. 1.初始化数据时 A添加属性flag(bool)标识,如果B中存在A中某个 ...

  7. vue框架中什么是MVVM

    前端页面中使用MVVM的思想,即MVVM是整个视图层view的概念,属于视图层的概念. MVVM是前端视图层的分层开发思想,将页面分成了Model, View,和VM:其中VM是核心,因为VM是V和M ...

  8. vue框架中的Axios封装

      function axios(options) {     let promise = new Promise((resolve, reject) => {         var xhr ...

  9. js获得昨天前天明天时间以及setDate()

    <script type="text/javascript"> function GetDateStr(AddDayCount) { var dd = new Date ...

随机推荐

  1. linux运维、架构之路-linux基础优化

    1.查看linux版本 cat /etc/redhat-release #CentOS release 6.9 (Final) ————>查看版本号 uname -m #x86_64 ————& ...

  2. python学习_day1

    简单的输入与输出 python3.x输入 用内置函数input(),返回的数据类型是string,输出用print() 查看数据类型 用type方法 例如 a = int(input('请输入:')) ...

  3. [window] Pyhton轻便好用的spyder IDE如何去除E501 line too long提示

    spyder 使用pep8作为代码规范的标准,默认单行长度是89个字符以内. 作为一个完美控,在使用spyer有的进行coding时,每当看到以下这个小小的warning时,心情都不是很爽: 89个字 ...

  4. ACM 求全排列(字典序、邻位对换、递增进位制数,递减进位制数)

    字典序:(联合康托展开就也可以按照中介数求) 邻位对换.递增进位制数,递减进位制数:具体的实现和算法讲解如下: 代码..C++版的实现并不好..因为是挨个向后找的,如果K很大的时候会超时,不过...思 ...

  5. Linux基础命令及使用帮助

    一.内部命令 内置命令(builtin):由shell程序自带的命令 help:查看内部命令 enable -n command 禁用某内部命令 enable -n 查看全部被禁用的命令 enable ...

  6. [CSP-S模拟测试]:木叶下(图论)

    题目传送门(内部题77) 输入格式 第一行一个整数$n$,表示原先的树的点数接下来$n-1$行每行两个整数$a,b$,表示原先的树上的$n-1$条边,保证这$n-1$条边形成一棵树. 接下来一行一个整 ...

  7. Linux双网卡绑定和解除

    转载双网卡绑定和解除  一定要在服务管理中关闭NetworkManager服务并禁用自动启动,因为NetworkManager服务是实时生效的,一旦设置错,管理员就得回到机房接显示器配置网络连接. 以 ...

  8. Hibernate入门简介

    什么是Hibernate框架? Hibernate是一种ORM框架,全称为 Object_Relative DateBase-Mapping,在Java对象与关系数据库之间建立某种映射,以实现直接存取 ...

  9. shell 操作字符串 变量 数组

    #!/bin/bash name="jack" #使用双引号拼接 #greeting="hello,"$name"!" #greeting_ ...

  10. GMSSL学习总结1

    接触GMSSL一段时间了,总结一点点想法 证书:DER格式.PEM格式 .DER = DER扩展用于二进制DER编码证书. .PEM = PEM扩展用于不同类型的X.509v3文件,是以“ - BEG ...