源码:注!原创的!!!!

<template>
<div id="DATE">
<ul class="dateForm" @change="VpushDateTime((ymd+hour+minute))">
<!-- 年月日 -->
<li class="ymd">
<div class="postion input">
<label @click.stop.prevent="selectState=true"><input type="text" v-model="ymd"><!--
--><i class="glyphicon glyphicon-triangle-bottom"></i>
</label>
</div>
<!-- 下拉列表年月日 -->
<select v-if="selectState" v-model="ymd" @click.stop="VgetSelect('ymdSelect',$event)" class="postion list select" id="ymdSelect" size="4">
<option v-for="itme in ymdList" v-text="itme" v-bind:value="itme"></option>
</select>
</li>
<!-- 小时 -->
<li class="hour">
<div class="postion input">
<label @click.stop="selectState=true"><input type="text" v-model="hour"><!--
--><i class="glyphicon glyphicon-triangle-bottom"></i>
</label>
</div>
<!-- 下拉列表小时 -->
<select v-if="selectState" v-model="hour" @click.stop="VgetSelect('hourSelect',$event)" class="postion list select" id="hourSelect" size="4">
<option v-for="(itme,i) in hourList" v-text="itme" v-bind:value="itme" ></option>
</select>
</li>
<!-- 分钟 -->
<li class="minute">
<div class="postion input">
<label @click.stop="selectState=true"><input type="text" v-model="minute"><!--
--><i class="glyphicon glyphicon-triangle-bottom"></i>
</label>
</div>
<!-- 下拉列表分钟 -->
<select v-if="selectState" v-model="minute" @click.stop="VgetSelect('minuteSelect',$event)" class="postion list select" id="minuteSelect" size="4">
<option v-for="itme in minuteList" v-text="itme" v-bind:value="itme"></option>
</select>
</li>
</ul>
<button @click="p=23,ps=!ps">change</button>
<p v-if="ps">{{p}}</p>
</div>
</template>
<script>
import moment from "moment";
//设置时间核心插件语言
moment.locale("zh-cn");
//字典=》全国放假日[因为不知道明年放假是如何定的,所以只写死今年]
const wordBookDate= ["2018年06月16日","2018年06月17日","2018年06月18日","2018年09月22日","2018年09月23日","2018年09月24日","2018年10月01日","2018年10月02日","2018年10月03日","2018年10月04日","2018年10月05日","2018年10月06日","2018年10月07日"]
;
export default {
props:{
init:''
},
data() {
return {
p:'12',
ps:false,
//输入框
//年月日
ymd: '',
//小时
hour: '',//moment().format('HH')+'时'
//分钟
minute: moment().format('mm')+'分'
//下拉框状态
,selectState:false
};
},
methods: {
//向父组件传值
VpushDateTime(data) {
const _this = this;
// _this.$emit("getDateTime", _this.ymd);
_this.$emit("getDateTime", data);
},
//下拉列表选择
VgetSelect(selectName,e){
const _this=this;
const oSelec=document.querySelector('#'+selectName); if(selectName.startsWith('ymd')){
//console.log('年月日');
//_this.ymd=(e.target).innerText;
}else if(selectName.startsWith('hour')) {
//console.log('小时的'); }else if(selectName.startsWith('minute')){
//console.log('分钟的'); }
/*oSelec.addEventListener("click",function(e){
console.log(selectName)
if(selectName.startsWith('ymd')){
console.log('年月日');
}else if(selectName.startsWith('hour')) {
console.log('小时的');
}else if(selectName.startsWith('hour')){
console.log('分钟的');
}
//_this.ymd=(e.target).innerText;
_this.ymd=(e.target).innerText;
//_this.VpushDateTime(_this.ymd);
},false)*/
},
//检测最终值是否正确
Vcheck(date){
const _this=this;
_this.VpushDateTime(date)
}, },
computed: {
/* year-month-day
hour
Minute */
//年月日
ymdList:()=>{
/*const _this=this;*/
let arr=[];
const month= wordBookDate[(moment().month()+2).toString()];
//取60天区间
for(let i=0;i<60;i++){
let ymd=moment().add(i,'day').format('L');
let day=moment(ymd).day();
//过滤周六日
if(!(day==0||day==6)){
ymd=ymd .replace(/[/]/, "年")
.replace(/[/]/, "月") + "日";
arr.push(ymd)
}
//过滤周六日完毕
}
//取60天区间完毕
//过滤法定节日
if(month.length!=0){
//传统写法
for(let i=0;i<arr.length;i++){
for(let m=0;m<=month.length;m++){
if(arr[i]==month[m]){
//改变原数组
arr.splice(i,1);
}
}
}
}
//过滤法定节日完毕
return arr;
},
//时
hourList:()=>{
return ['09时','10时','11时','13时','14时'];
},
//分
minuteList:()=>{
return ['00分','01分','02分','03分','04分','05分','06分','07分','08分','09分',
'10分','11分','12分','13分','14分','15分','16分','17分','18分','19分',
'20分','21分','22分','23分','24分','25分','26分','27分','28分','29分',
'30分','31分','32分','33分','34分','35分','36分','37分','38分','39分',
'40分','41分','42分','43分','44分','45分','46分','47分','48分','49分',
'50分','51分','52分','53分','54分','55分','56分','57分','58分','59分']
}
},
mounted() {
const _this = this;
//当鼠标点击旁边隐藏下拉框
document.documentElement.addEventListener('click',function (e) {
_this.selectState=false;
});
//console.clear();
//console.log(_this.init.type);
moment().hour() >= 15 ? _this.ymdList.splice(0,1) : '';
_this.ymd=_this.ymdList[0];//年月日输入赋值,默认第一个
_this.hour=_this.hourList[0];//小时,默认第一个
console.log(_this.hourList[0]);
_this.VpushDateTime((_this.ymd+_this.hour+_this.minute));
},
};
</script>
<style lang="scss" scoped>
/* 整体样式 */
.dateForm{
list-style: none;
padding: 0;margin:0;
&>li{
display: inline-block;
position: relative;
}
.postion{
position: absolute;
top:0;left: 0;
}
.postion.input{
z-index: 2;
background:#fff;
}
.postion.list{
padding: 0;
box-sizing: border-box;
width: 100%;
top:28px;
}
}
/* 输入框样式 */
label {
display: inline-block;
height: 26px;
line-height: 26px;
border: 1px solid #ddd;
padding: 0;
margin: 0;
overflow: hidden;
input {
padding: 0;
margin: 0;
outline: none;
border: none;
box-sizing: border-box;
padding-left: 3px;
}
i {
border-left: 1px solid #ddd;
display: inline-block;
line-height: 26px;
vertical-align: bottom;
text-align: center;
cursor: pointer;
font-size: 14px;
color: #6d6d6d;
}
}
.ymd {
width: 145px;
.postion.input{
width: 145px;
label{
width: 145px;
}
}
input {
width: 122px;
}
i {
padding-left: 3px;
}
}
.hour,
.minute {
width: 60px;
.postion.input{
width: 60px;
label{
width: 60px;
}
}
input {
width: 36px;
}
i {
width: 18px;
}
}
/* 下拉列表样式 */
.select{
background: #fff;
outline: none;
margin: 0;
padding:0;
option{
height: 28px;
line-height: 28px;
padding-top: 5px;
padding-left: 5px;
cursor: pointer;
}
option:hover,option:focus,option:active{
background: #1883D7;
color:#fff;
}
}
.select::-webkit-scrollbar{
width:2px;
background: #6d6d6d;
}
</style>

  

vue js moment.js 过滤了双休日和法定节假日的更多相关文章

  1. Vue 入门指南 JS

    Vue 入门指南 章节导航 英文:http://vuejs.org/guide/index.html 介绍 vue.js 是用来构建web应用接口的一个库 技术上,Vue.js 重点集中在MVVM模式 ...

  2. Vue过渡效果之JS过渡

    前面的话 与CSS过渡不同,JS过渡主要通过事件进行触发.本文将详细介绍Vue过渡效果之JS过渡 事件钩子 JS过渡主要通过事件监听事件钩子来触发过渡,共包括如下的事件钩子 <transitio ...

  3. 使用 Vue 和 epub.js 制作电子书阅读器

    ePub 简介 ePub 是一种电子书的标准格式,平时我看的电子书大部分是这种格式.在手机上我一般用"多看"阅读 ePub 电子书,在 Windows 上找不到用起来比较顺心的软件 ...

  4. socket应用(vue、node.js、M站)

    socket应用(vue.node.js.M站) 前言:我们在做一些项目的时候需要做到实时变化, 比如我们有时候有需求会要求我们做一个类似于聊天室的页面 比如有些时候我们对某些东西进行点赞和刷票,需要 ...

  5. vue项目中主要文件的加载顺序(index.html、App.vue、main.js)

    先后顺序: index.html > App.vue的export外的js代码 > main.js > App.vue的export里面的js代码 > Index.vue的ex ...

  6. vue.runtime.esm.js:593 [Vue warn]: Invalid prop: custom validator check failed for prop "value".报错解决

    在uni中使用 picker组件,一直报错 vue.runtime.esm.js:593 [Vue warn]: Invalid prop: custom validator check failed ...

  7. vue中引入js,然后new js里的方法

    阿里云Web播放器Web端使用SDK说明:https://help.aliyun.com/document_detail/51991.html?spm=5176.11065259.1996646101 ...

  8. 最新的vue没有dev-server.js文件,如何进行后台数据模拟?

    https://blog.csdn.net/qq_34645412/article/details/78833860 https://blog.csdn.net/qq_34645412/article ...

  9. vue中eslintrc.js配置最详细介绍

    本文是对vue项目中自带文件eslintrc.js的内容解析, 介绍了各个eslint配置项的作用,以及为什么这样设置. 比较详细,看完能对eslint有较为全面的了解,基本解除对该文件的疑惑. /* ...

随机推荐

  1. libiop网络库数据结构和基础知识

    最近朋友推荐,学习了libiop这个网络库,作者封装的很全面,代码很简洁 适合初学者学习基于事件驱动的网络io 先看看iop_def.h, 这里面定义了常用的数据结构 tag_iop_base_t 主 ...

  2. 手脱PE Pack v1.0

    1.PEID查壳 PE Pack v1.0 2.载入OD,一上来就这架势,先F8走着 > / je ; //入口点 -\E9 C49D0000 jmp Pepack_1.0040D000 004 ...

  3. 百度搜索URL中的参数都是什么

    最近,点石排名更新了一个新功能——站内搜索.其实理解起来也很简单,就是通过URL限定搜索结果为某个网站,从而参与点击(例如:https://www.baidu.com/s?wd=SEO&si= ...

  4. 常用的20个强大的 Sublime Text 插件

    作为一个开发者你不可能没听说过 Sublime Text.不过你没听说过也没关系,下面让你明白. Sublime Text是一款非常精巧的文本编辑器,适合编写代码.做笔记.写文章.它用户界面十分整洁, ...

  5. 【BZOJ】1023: [SHOI2008]cactus仙人掌图 静态仙人掌(DFS树)

    [题意]给定仙人掌图(每条边至多在一个简单环上),求直径(最长的点对最短路径).n<=50000,m<=10^7. [算法]DFS树处理仙人掌 [题解]参考:仙人掌相关问题的处理方法(未完 ...

  6. 【leetcode 简单】第四题 罗马数字转整数

    罗马数字包含以下七种字符:I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列 ...

  7. jQuery 页面加载初始化

    jQuery 页面加载初始化的方法有3种 ,页面在加载的时候都会执行脚本,应该没什么区别,主要看习惯吧,本人觉得第二种方法最好,比较简洁. 第一种: $(document).ready(functio ...

  8. 郑轻校赛 2127 tmk射气球 (数学)

    Description 有一天TMK在做一个飞艇环游世界,突然他发现有一个气球匀速沿直线飘过,tmk想起了他飞艇上有一把弓,他打算拿弓去射气球,为了提高射击的准确性,他首先在飞艇上找到一个离气球最近的 ...

  9. 工作中常用的Git操作--------(一)

    今天主要记录一下平常工作当中使用的git操作: 1.git的安装这里省略: 2.git的操作指令: 在项目开发中,经常是拉去经理已经搭建好的一个项目,也就是给我们一个git地址.比如:http://g ...

  10. spring boot 加载原理

    spring boot quick start 在springBoot里面,很吸引的一个特征就是可以直接把应用打包成jar/war包形式.然后jar/war包可以直接运行的.不需要再配置web Ser ...