赞
踩
通过选择上面的选项展示选择不同的日期,周,月份,年份
因为项目中点击切换时需要传递不同的日期,
例如:日,即选择日期的00:00分-23:59
周:即选择当月的第三周,截取第三周的周一和第三周的周日为开始时间和截止时间传值
月,即选择月的第一天---选择月得最后一天传值
- <template>
- <div class="chart-date-picker">
- <el-radio-group v-model="dateType" size="mini" @change="handleChange">
- <el-radio-button label="date">日</el-radio-button>
- <el-radio-button label="week">周</el-radio-button>
- <el-radio-button label="month">月</el-radio-button>
- <el-radio-button label="year">年</el-radio-button>
- </el-radio-group>
- <el-date-picker :clearable="false" v-model="date" size="mini" :picker-options="{ 'firstDayOfWeek': 1 }" :type="dateType" :format="dateType==='week'?'yyyy 第 WW 周':null" :placeholder="dateType==='date'?'选择日':dateType==='week'?'选择周':dateType==='month'?'选择月':dateType==='year'?'选择年':''" style="width: 140px;vertical-align: middle" @change="handleChange"></el-date-picker>
- </div>
- </template>
-
- <script>
- import { dateFormat } from "@/filters/index";
- export default {
- name: "ultralabxChartDatePicker",
- props: {
- value: {
- type: Date,
- },
- type: {
- type: String,
- default: "week",
- },
- },
- data() {
- return {
- dateType: "",
- date: null,
- };
- },
- methods: {
- handleChange() {
- let obj = this.timeDifference(this.date, this.dateType);
- this.$emit("handleChangeTime", obj);
- },
- timeDifference() {
- let timeObj = {};
- let time = new Date(dateFormat(this.date, "yyyy-MM-dd")); // 可入参指定时间
- let year = time.getFullYear();
- let month = time.getMonth();
- let date = time.getDate(); // 获取日期
- let day = time.getDay(); // 获取周几,0-6,0表示周日
- let _day = day == 0 ? 7 : day;
- switch (this.dateType) {
- case "date":
- timeObj = {
- startTime: `${dateFormat(this.date, "yyyy-MM-dd")} 00:00:00`,
- endTime: `${dateFormat(this.date, "yyyy-MM-dd")} 23:59:59`,
- };
- break;
- case "week":
- // 获取周一日期
- var startDate = new Date(year, month, date - _day + 1);
- // 获取周日日期
- var endDate = new Date(
- new Date(startDate).getTime() + 6 * 24 * 3600 * 1000
- );
- timeObj = {
- startTime: `${dateFormat(startDate, "yyyy-MM-dd")} 00:00:00`,
- endTime: `${dateFormat(endDate, "yyyy-MM-dd")} 23:59:59`,
- };
- break;
- case "month":
- var startDate = new Date(year, month, 1);
- var endDate = new Date(year, month + 1, 0);
- timeObj = {
- startTime: `${dateFormat(startDate, "yyyy-MM-dd")} 00:00:00`,
- endTime: `${dateFormat(endDate, "yyyy-MM-dd")} 23:59:59`,
- };
- break;
- case "year":
- var startDate = new Date(year, 0, 1);
- var endDate = new Date(year, 12, 0);
- timeObj = {
- startTime: `${dateFormat(startDate, "yyyy-MM-dd")} 00:00:00`,
- endTime: `${dateFormat(endDate, "yyyy-MM-dd")} 23:59:59`,
- };
- break;
- }
- return timeObj;
- },
- },
- watch: {
- value: {
- immediate: true,
- handler(val) {
- this.date = val;
- },
- },
- type: {
- immediate: true,
- handler(val) {
- if (val === this.dateType) {
- return;
- }
- this.dateType = val;
- },
- },
- date: {
- immediate: true,
- handler(val) {
- this.$emit("input", val);
- },
- },
- dateType: {
- immediate: true,
- handler(val) {
- if (val === this.type) {
- return;
- }
- this.$emit("update:type", val);
- },
- },
- },
- };
- </script>
-
- <style lang="scss">
- .chart-date-picker {
- .el-radio-button--mini .el-radio-button__inner {
- padding: 5px 15px;
- }
-
- .el-radio-button:first-child .el-radio-button__inner {
- border-radius: 15px 0 0 15px;
- }
-
- .el-radio-button:last-child .el-radio-button__inner {
- border-radius: 0;
- }
-
- .el-input--mini .el-input__inner {
- height: 24px;
- line-height: 24px;
- }
-
- .el-input--mini .el-input__icon {
- line-height: 24px;
- }
-
- .el-input__inner {
- border-left: none;
- border-radius: 0 15px 15px 0;
- }
- }
- </style>
-
- <style lang="scss" scoped>
- .chart-date-picker {
- }
- </style>
此处为上面时间格式化的方法,按需使用
- /**
- * 日期格式化
- */
- export function dateFormat(date, format = 'yyyy-MM-dd hh:mm:ss') {
- if (date !== 'Invalid Date') {
- var o = {
- 'M+': date.getMonth() + 1, // month
- 'd+': date.getDate(), // day
- 'h+': date.getHours(), // hour
- 'm+': date.getMinutes(), // minute
- 's+': date.getSeconds(), // second
- 'q+': Math.floor((date.getMonth() + 3) / 3), // quarter
- 'S': date.getMilliseconds() // millisecond
- }
- if (/(y+)/.test(format)) {
- format = format.replace(RegExp.$1,
- (date.getFullYear() + '').substr(4 - RegExp.$1.length))
- }
- for (var k in o) {
- if (new RegExp('(' + k + ')').test(format)) {
- format = format.replace(RegExp.$1,
- RegExp.$1.length === 1 ? o[k]
- : ('00' + o[k]).substr(('' + o[k]).length))
- }
- }
- return format
- }
- return ''
- }
父组件中使用方法
- <chart-date-picker v-model="value" :type.sync="groupType" @handleChangeTime="handleChangeTime(type=0,$event)"></chart-date-picker>
-
- data() {
- retrun {
- value: new Date(),
- groupType: "week",
-
- }
- }
-
- methods:{
- handleChangeTime(type, timeObj){
- console.log(timeObj)
- // TODO
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。