vue 时间组件

2019-05-29  本文已影响0人  阳光之城alt
image.png

今天在自己写时间组件时遇见的问题
1 如何设置时间

var d2 = new Date(2008, 10 - 1, 1);
     console.log(d2.toLocaleString() + "<br>");
      2008/10/1 上午12:00:00<br>

2正则的运用

input_str.split(/[\s\n]/)

let reg =/[\u4e00-\u9fa5]/g;
    let comm=alldatas
    let tm=comm.split(reg)

3 原文代码

<template>
       <div>
            <div id="data">
                <p>
                    <span id="prevnain" @click="prevnain">上一年</span>
                    <span id="prev" @click="prev">上一月</span>
                    <span id="nian">{{nian}}年{{arr[yue]}}{{tian}}日</span>
                    <span id="next" @click="next">下一月</span>
                    <span id="nextnian" @click="nextnian">下一年</span>
                </p>
                <ul id="title">
                    <li>日</li>
                    <li>一</li>
                    <li>二</li>
                    <li>三</li>
                    <li>四</li>
                    <li>五</li>
                    <li>六</li>
                </ul>
                <ul id="date" :title="mom.length">
                        <li 
                            v-for="(idata,ind) in mom" :key="ind" :title="idata"
                            :class="[onebtn(idata,ind)]"
                            @click="clickdate(idata,ind)"
                        >{{oneclass(idata,ind)}}</li>
                </ul>
            </div>
                
         </div>
</template>

<script>
import {mapGetters,mapState, mapMutations, mapActions} from 'vuex'

export default {
    name:"datas",
    props:{
          alldatas:{
                type: String,
                default: ""
            }
    },
    data(){
        return{
            dat:"",
            nianD:"",
            tian:"",
            yueD:"",
            tianD:"",
            nian:"",
            yue:"",
            textdom:"",
            mom:[],
            ends:[],
            star:[],
            arr:["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"]
        }
    },
    created () {
    
    },
    mounted() {
        //添加数据
        this.alldatas&&this.judges(this.alldatas)
        //初始化时间
        this.Initialization(this.alldatas)
        this.add()
    },
    methods: {
        add() {
                var nian = this.dat.getFullYear();//当前年份
                var yue = this.dat.getMonth(); //当前月
                var tian = this.dat.getDate(); //当前天
                        this.nian=nian,
                        this.yue=yue,
                        this.tian=tian
                //把时间设为下个月的1号 然后天数减去1 就可以得到 当前月的最后一天; ${setDat}+"最后一天"+
                var setDat = new Date(nian,yue + 1,1 - 1); 
                var setTian = setDat.getDate(); //获取 当前月最后一天
                var setZhou = new Date(nian,yue,1).getDay(); //获取当前月第一天 是 周几
                console.log(setDat,setTian,setZhou)
                this.textdom=`${setTian}+"最后一天"+${setZhou}+"周几"`
                let sque=[];//渲染空白 与 星期 对应上
                for(var i=0;i<setZhou ;i++){sque.push(i)}
                this.ends=sque
                let sall=[];//利用获取到的当月最后一天 把  前边的 天数 都循环 出来
                for(var i=1;i<=setTian;i++){sall.push(i)}
                this.star=sall
                this.mom=[...sque,...sall]
        },
        prev(){
            this.dat.setMonth(this.dat.getMonth() - 1); //当点击下一个月时 对当前月进行加1;
            this.add(); //重新执行渲染 获取去 改变后的  年月日  进行渲染;
        },
        next(){
            this.dat.setMonth(this.dat.getMonth() + 1); //当点击下一个月时 对当前月进行加1;
            this.add(); //重新执行渲染 获取去 改变后的  年月日  进行渲染;
        },
        prevnain(){
            this.dat.setMonth(this.dat.getMonth() - (11+this.yue+1)); //当点击下一个月时 对当前月进行加1;
            let cv=this.dat.setDate(1)
            this.add();  //重新执行渲染 获取去 改变后的  年月日  进行渲染;
        },
        nextnian(){
            this.dat.setMonth(this.dat.getMonth() + (11-this.yue+1)); //当点击下一个月时 对当前月进行加1;
            let cv=this.dat.setDate(1)
            this.add(); //重新执行渲染 获取去 改变后的  年月日  进行渲染;
        },
        clickdate(idata,ind){
            let cv=this.dat.setDate(idata)
            this.tianD=idata
            this.yueD =this.yue
            this.add(); //重
            let dom=this.nian+"年"+(this.yue+1)+"月"+this.tian+"日"
            this.$emit('somDate',dom)
        },
        Initialization(){
            this.alldatas?this.dat:(this.dat = new Date())//当前时间
            this.nianD = this.dat.getFullYear(); //当前年份
            this.yueD = this.dat.getMonth(); //当前月
            this.tianD = this.dat.getDate();//当前天    这保存的年月日 是为了 当到达当前日期 有对比
        },
        //判断是否传值
        judges(alldatas){
            let longnian="";
            let longyue="";
            let longri="";
            let reg =/[\u4e00-\u9fa5]/g;
            let tm=alldatas.split(reg)
            tm.pop();
            longnian=tm[0].length==4?tm[0]:1978
            longyue=tm[1].length==2?tm[1]:"0"+tm[1]
            longri=tm[2].length==2?tm[2]:"0"+tm[2]
            this.dat=new Date(longnian,longyue-1,longri)
        },
        oneclass(idata,ind){
            return  (ind>=this.ends.length)?idata:""
        },
        onebtn(idata,ind){
            return  this.nian == this.nianD && this.yue == this.yueD && idata== this.tianD?
             "active":"hover"
        }
    },
    computed:{
    
    },
    watch:{
        
    },
    components:{
        
  }
    
}

</script>

<style  scoped >
    * {
        margin: 0px;
        padding: 0px;
    }
    
    #data {
        width: 280px;
        border: 1px solid #000000;
        margin: 20px auto;
    }
    
    #data>p {
        display: flex;
        color: #fff;
    }
    
    #yue{
        color: #fff;
    }
    
    #data>h5 {
        text-align: center;
    }
    
    #data>p>span {
        display: block;
        height: 30px;
        line-height: 30px;
    }
    
    #prev,
    #next {
        cursor: pointer;
    }
    
    #nian {
        flex: 1;
        text-align: center;
    }
    
    #title {
        overflow: hidden;
        list-style: none;
        background: #ccc;
    }
    
    #title>li {
        float: left;
        width: 40px;
        height: 26px;
        line-height: 26px;
        text-align: center;
    }
    
    #date {
        overflow: hidden;
        list-style: none;
    }
    
    #date>li {
        float: left;
        width: 34px;
        height: 34px;
        margin: 1px 1px;
        border: 2px solid rgba(0, 0, 0, 0);
        line-height: 34px;
        text-align: center;
        cursor: pointer;
    }
    
    #date>.hover:hover {
        border: 2px solid red;
    }
    
    .active {
        color: red;
    }

</style>



参考文章
正则地址
js时间的几种设置方式
原文地址
1 https://www.cnblogs.com/durenlong/p/7754862.html
2https://blog.csdn.net/u011043843/article/details/29435497
3https://blog.csdn.net/lanseyuanwei2/article/details/51956520
4https://blog.csdn.net/LXY_Fighting/article/details/79294237
6纯数字键盘H5文章
https://wuwhs.github.io

上一篇下一篇

猜你喜欢

热点阅读