Vue + el-date-picker日期时间控件实现今天、昨天、上周、上一个月等功能

本文介绍了如何在Vue项目中利用Element UI的el-date-picker组件创建日期时间范围选择器,并通过moment.js实现预设的快捷时间段,如今天、昨天、近一周等。同时展示了如何获取用户选择的时间范围并进行后续操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 有时我们需要搜索对应时间段的内容,我们就可以用el-date-picker这个日期时间控件来实现

0. 整体代码:

【效果】:
在这里插入图片描述
【栗子代码】:

<template>
  <div>
    <el-col :span="10">
      <el-row align="middle">
        <el-col :span="4" ><label>时间范围:</label></el-col>
        <el-col :span="20">
          <el-date-picker v-model="dateSpan" type="datetimerange" :picker-options="pickerOptions"
                          :unlink-panels="true" range-separator="至" start-placeholder="开始时间"
                          size="mini" end-placeholder="结束时间" value-format="yyyy-MM-dd HH:mm:ss">

          </el-date-picker>
        </el-col>
      </el-row>
    </el-col>
    <el-col :span="10">
      <el-button @click="getSearch" size="min" >查询</el-button>
    </el-col>
  </div>
</template>

<script>
import moment from 'moment'

export default {
  name: "SideOne",
  methods: {
    getSearch () {
      const startTime = this.dateSpan.length !==0 ?this.dateSpan[0] : ''
      const endTime = this.dateSpan.length !==0 ?this.dateSpan[1] : ''
      console.log('startTime: ' + startTime)
      console.log('endTime: ' + endTime)
    }
  },
  data: function () {
    return {
      pickerOptions: {
        shortcuts: [{
          text: '今天',
          onClick (picker) {
            const start = new Date()
            const end = new Date()
            const startTime = moment(moment().startOf('day').valueOf())
            const endTime = moment(moment().endOf('day').valueOf())
            start.setTime(startTime)
            end.setTime(endTime)
            picker.$emit('pick',[start, end])
          }
        }, {
          text: '最近一个月',
          onClick (picker) {
            const start = new Date()
            const end = new Date()
            start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
            picker.$emit('pick',[start, end])
          }
        }]
      },
      dateSpan: ''
    }
  }
}
</script>
</style>
1. 要点讲解:

 绑定:picker-options=“pickerOptions”,在pickerOptions中定义快捷时间段

 【今天】:

 需要引入moment组件,import moment from ‘moment’

const startTime = moment(moment().startOf('day').valueOf())
const endTime = moment(moment().endOf('day').valueOf())

 【昨天】:

const startTime = moment(moment().subtract(1,'day').startOf('day').valueOf())
const endTime = moment(moment().subtract(1,'day').endOf('day').valueOf())

 【近七天】:

 const startTime = moment(moment().subtract(6,'day').startOf('day').valueOf())
 const endTime = moment(moment().endOf('day').valueOf())

 【上个月】:

const startTime = moment(moment().subtract(1,'month').startOf('month').valueOf())
const endTime = moment(moment().subtract(1,'month').endOf('month').valueOf())

 上述的时间段是以0点-24点为基准的,下列这些方式,是以当前时间来计算的时间段

 【最近一周】:

start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)

 【最近一个月】:

start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)

 【最近三个月】:

start.setTime(start.getTime() - 3600 * 1000 * 24 * 30 * 3)

 选取的时间段可以通过dateSpan来获取,如栗子代码中:

    getSearch () {
      const startTime = this.dateSpan.length !==0 ?this.dateSpan[0] : ''
      const endTime = this.dateSpan.length !==0 ?this.dateSpan[1] : ''
      console.log('startTime: ' + startTime)
      console.log('endTime: ' + endTime)
    },
### Vue 3 中使用 Element Plus 的 `el-date-picker` 组件 #### 单个日期选择器的配置与赋值 对于单个日期的选择,可以按照如下方式定义模板部分: ```html <el-form-item prop="install_date" label="安装日期:"> <el-date-picker v-model="siteInfo.install_date" type="date" placeholder="安装日期" value-format="YYYY-MM-DD" /> </el-form-item> ``` 在脚本部分,则通过 TypeScript 定义响应式的对象来存储选中的日期,并初始化其默认值为当前时间戳转换后的字符串形式[^1]。 ```typescript <script setup lang="ts"> import { reactive } from 'vue'; import { formatTimeStamp } from '/@/utils/utils'; let siteInfo = reactive({ install_date: formatTimeStamp(new Date().getTime(), "YYYY-mm-dd"), }); </script> ``` 此代码片段展示了如何利用自定义工具函数 `formatTimeStamp()` 来格式化 JavaScript 时间戳成指定样式的日期串作为初始显示给用户的默认日期。 #### 处理日期范围选择的情况 当涉及到选取一段连续的时间区间时,需调整模型绑定至一对 `[Date, Date]` 类型变量上。下面的例子说明了怎样创建一个具有预设起始结束时刻的日历控件实例[^2]。 ```typescript const bidTimeModel = ref<[Date, Date]>([ new Date('2024-01-01'), // 开始日期 new Date('2024-01-31') // 结束日期 ]); ``` 对应的 HTML 部分应修改属性 `type="daterange"` 并关联上述声明过的双向绑定字段名。 ```html <el-date-picker v-model="bidTimeModel" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" /> ``` 以上实现了带有固定时间段选项的功能模块设计思路。 #### 动态加载下拉列表项并应用到表单项中 针对某些场景下的需求变化,可能还需要动态更新界面元素的内容。比如,在接收到服务器端传回的数据之后再填充到特定 UI 控制部件内。这里给出了一种实现方案用于处理这种情况下的数据同步逻辑[^3]。 ```javascript handlePatch() { let data = state.fromData.filter(i => i.option); for (let item of data) { if (item["prop"] === "type") { getUnitKv().then(res => { if (res) { state.dwData = res; item["option"] = res; // 将接口返回的结果集分配给目标组件 } }); } } } ``` 这段代码体现了异步请求完成后对局部状态管理机制的应用模式,确保视图能够及时反映出最新的业务信息变动情况。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值