Element UI【组件拓展】el-datetime-picker-before 禁止选择未来时间的日期时间选择器(精确到时分秒)

简介: Element UI【组件拓展】el-datetime-picker-before 禁止选择未来时间的日期时间选择器(精确到时分秒)

               

el-datetime-picker-before.vue

<template>
    <div>
        <el-date-picker
                value-format="yyyy-MM-dd"
                @change="dateChange"
                :size="size"
                :picker-options="dateOptions"
                v-model="date"
                type="date"
                placeholder="选择日期">
        </el-date-picker>
        <el-time-picker
                v-if="showTimePicker"
                value-format="HH:mm:ss"
                @change="timeChange"
                :size="size"
                :picker-options="timeOptions"
                v-model="time"
                placeholder="选择时间">
        </el-time-picker>
    </div>
</template>
<script>
    export default {
        model: {
            prop: 'value',
            event: 'updateDateTime'
        },
        methods: {
            dateChange(newDate) {
                // 从其他日期切换到今天
                if ((newDate === new Date().format('yyyy-MM-dd')) && (this.time > new Date().format("hh:mm:ss"))) {
                    this.time = '00:00:00'
                }
                this.updateTimeOptions()
                this.$emit('updateDateTime', this.date + ' ' + this.time)
            },
            timeChange() {
                this.$emit('updateDateTime', this.date + ' ' + this.time)
            },
            updateTimeOptions() {
                if (this.date === new Date().format('yyyy-MM-dd')) {
                    this.$set(this.timeOptions, 'selectableRange', "00:00:00-" + new Date().format("hh:mm:ss"))
                } else {
                    this.$set(this.timeOptions, 'selectableRange', '')
                }
                this.reloadTimePicker()
            },
            reloadTimePicker() {
                this.showTimePicker = false
                this.$nextTick(
                    () => {
                        this.showTimePicker = true
                    }
                )
            },
        },
        props: {
            value: String,
            size: {
                type: String,
                default: 'mini'
            }
        },
        mounted() {
            let dateTime = this.value.split(' ')
            this.date = dateTime[0]
            this.time = dateTime[1]
            this.updateTimeOptions()
        },
        data() {
            return {
                showTimePicker: true,
                date: '',
                time: '',
                dateOptions: {
                    //禁止选择未来的日期,不包含今天。
                    disabledDate(time) {
                        return time.getTime() > Date.now()
                    }
                },
                timeOptions: {
                    //禁止选择未来的时间,不包含当前时刻。
                    selectableRange:
                        "00:00:00-" + new Date().format("hh:mm:ss")
                },
            }
        }
    }
    // 为Date原型添加格式化方法
    Date.prototype.format = function (fmt) {
        var o = {
            "M+": this.getMonth() + 1, //月份
            "d+": this.getDate(), //日
            "h+": this.getHours(), //小时
            "m+": this.getMinutes(), //分
            "s+": this.getSeconds(), //秒
            "q+": Math.floor((this.getMonth() + 3) / 3), //季度
            S: this.getMilliseconds() //毫秒
        };
        if (/(y+)/.test(fmt)) {
            fmt = fmt.replace(
                RegExp.$1,
                (this.getFullYear() + "").substr(4 - RegExp.$1.length)
            );
        }
        for (var k in o) {
            if (new RegExp("(" + k + ")").test(fmt)) {
                fmt = fmt.replace(
                    RegExp.$1,
                    RegExp.$1.length == 1
                        ? o[k]
                        : ("00" + o[k]).substr(("" + o[k]).length)
                );
            }
        }
        return fmt;
    };
</script>
<style scoped>
</style>

使用

<template>
    <div style="padding: 20px">
        <el-datetime-picker-before v-model="pubTime" />
    </div>
</template>
<script>
    import elDatetimePickerBefore from './el-datetime-picker-before'
    export default {
        components:{elDatetimePickerBefore},
        data() {
            return {
                pubTime: "2021-05-24 02:50:44",
            }
        },
    }
</script>
<style scoped>
</style>
目录
相关文章
|
19天前
|
存储 搜索推荐 Java
探索安卓开发中的自定义视图:打造个性化UI组件Java中的异常处理:从基础到高级
【8月更文挑战第29天】在安卓应用的海洋中,一个独特的用户界面(UI)能让应用脱颖而出。自定义视图是实现这一目标的强大工具。本文将通过一个简单的自定义计数器视图示例,展示如何从零开始创建一个具有独特风格和功能的安卓UI组件,并讨论在此过程中涉及的设计原则、性能优化和兼容性问题。准备好让你的应用与众不同了吗?让我们开始吧!
|
19天前
|
JavaScript 前端开发 安全
[译] 在 Vue 组件中分离 UI 和业务逻辑。
[译] 在 Vue 组件中分离 UI 和业务逻辑。
|
17天前
|
开发者 C# Android开发
明白吗?Xamarin与Native的终极对决:究竟哪种开发方式更适合您的项目需求,让我们一探究竟!
【8月更文挑战第31天】随着移动应用开发的普及,开发者面临多种技术选择。本文对比了跨平台解决方案Xamarin与原生开发方式的优势与劣势。Xamarin使用C#进行跨平台开发,代码复用率高,可大幅降低开发成本;但因基于抽象层,可能影响性能。原生开发则充分利用平台特性,提供最佳用户体验,但需维护多套代码库,增加工作量。开发者应根据项目需求、团队技能和预算综合考量,选择最适合的开发方式。
58 0
|
19天前
|
JavaScript 前端开发 开发者
决战前端之巅!Element UI与Vuetify谁才是Vue.js组件界的霸主?一场关于颜值与实力的较量!
【8月更文挑战第30天】本文对比了两款热门的Vue.js组件库——Element UI与Vuetify。Element UI由饿了么团队打造,提供多种高质量UI组件,设计简洁大方。Vuetify基于Material Design规范,支持Vue.js 2.0及3.0版本,具备前瞻性。两者均涵盖表单、导航、数据展示等组件,Element UI配置选项丰富,而Vuetify则提供了更深层的样式定制功能。开发者可根据项目需求及个人偏好选择合适的组件库。
62 0
|
19天前
|
JavaScript 开发者 UED
Vue.js组件库大对决:Element UI与Vuetify,开发者的罗密欧与朱丽叶!
【8月更文挑战第30天】Element UI和Vuetify是Vue.js开发中的热门组件库,前者简洁高效,后者遵循Material Design,国际化程度高。两者均提供丰富的组件支持,但Vuetify组件更多样,设计更灵活;Element UI在性能和中文支持上更优。文档方面,Element UI更直观易懂,而Vuetify配置灵活但学习成本稍高。选择时需综合考虑项目需求、团队背景及设计风格,以达到最佳开发效果。
58 0
|
1月前
|
数据可视化 数据挖掘 持续交付
Axure Web端元件库:从Quick UI到500+组件的飞跃
在快速变化的数字世界中,产品设计不仅仅是功能的堆砌,更是用户体验的精心雕琢。原型设计作为产品开发过程中的关键环节,其重要性不言而喻。Axure,作为业界领先的原型设计工具,凭借其强大的交互设计和丰富的功能,赢得了全球设计师和开发者的信赖。而Axure Web端元件库,则是这一平台上的一颗璀璨明珠,它以超过500个精心设计的组件为基础,为设计师们打开了一扇通往高效、高质量原型设计的大门。
|
4月前
|
前端开发 搜索推荐 开发者
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
|
4月前
|
JavaScript 前端开发 开发者
SAP UI5 控件 sap.m.ListBase 的 inset 属性的作用介绍
SAP UI5 控件 sap.m.ListBase 的 inset 属性的作用介绍
|
4月前
|
前端开发 JavaScript API
SAP UI5 sap.ui.require.toUrl 的作用介绍
SAP UI5 sap.ui.require.toUrl 的作用介绍
|
4月前
|
JSON 前端开发 测试技术
SAP UI5 sap.ui.core.util.MockServer.simulate 方法介绍
SAP UI5 sap.ui.core.util.MockServer.simulate 方法介绍