zoukankan      html  css  js  c++  java
  • Vue自定义指令--实时时间转换指令

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script src="Vue.2.6.10.js"></script>
    </head>
    <body>
        <!-- 一般在服务端的存储时间格式是unix时间戳,如1483200000,本实例来实现这样一个自定义指令v-time,将表达式传入的时间戳转换为相对时间 -->
        <div id="app1">
            <div v-time="timeNow"></div>
            <div v-time="timeBefore"></div>
            <input type="text" :value="test" @input="changeTest">
            <p v-time="test"></p>
            <p>{{ test }}</p>
        </div>
    </body>
    <script>
        //为了使判断逻辑更简单,统一使用时间戳进行大小判断,声明一个对象Time,将它们都封装在里面
        var Time  = {
            //获取当前时间戳
            getUnix:function(){
                var date = new Date();
                return date.getTime();
            },
            //获取今天0点0分0秒时间戳
            getTodayUnix:function(){
                var date = new Date();
                date.setHours(0);
                date.setMinutes(0);
                date.setSeconds(0);
                date.setMilliseconds(0);
                return date.getTime();
            },
            //获取今年一月一日0点0分0秒的时间戳
            getYearUnix:function(){
                var date = new Date();
                date.setMonth(0);
                date.setDate(0);
                date.setHours(0);
                date.setMinutes(0);
                date.setSeconds(0);
                date.setMilliseconds(0);
                return date.getTime()
            },
            //获取标准的年月日
            getLastDate:function(time){
                var date = new Date(time);//传入的是unix时间戳
                var month = date.getMonth()+1 < 10 ? '0'+ (date.getMonth()+1):date.getMonth()+1;
                var day = date.getDate() < 10 ? '0' + (date.getDate()):date.getDate();
                return date.getFullYear() + '-' + month + '-' + day;
            },
            //格式化时间
            getFormatTime:function(timestamp){
                var now = this.getUnix();//调用这个对象的2这个方法
                var today = this.getTodayUnix();//今天0点时间戳
                var year = this.getYearUnix();
                var timer = (now - timestamp) / 1000;//转换为秒级时间戳
                var tip = '';
    
                if(timer <= 0){
                    tip='刚刚'
                }else if(Math.floor(timer/60) <= 0){
                    tip='刚刚'
                }else if(timer < 3600){
                    tip=Math.floor(timer/60) + '分钟前'
                }else if(timer >= 3600 && (timestamp - today >= 0)){
                    tip=Math.floor(timer/60) + '小时前'
                }else if(timer/86400 <= 31){
                    tip = Math.ceil(timer/86400) + '天前'
                }else{
                    tip=this.getLastDate(timestamp)
                };
    
                return tip;
            }
        };
        Vue.directive('time',{
            bind:function(el,binding){
                console.log(el,binding);
                el.innerHTML = Time.getFormatTime(binding.value);
                el._timeout_ = setInterval(function(){
                    el.innerHTML = Time.getFormatTime(binding.value);
                },60000)// 每分钟触发一次
            },
            update:function(el,binding){
                el.innerHTML = Time.getFormatTime(binding.value);
            },
            unbind:function(el){
                clearInterval(el._timeout_);
                delete el._timeout_;
            }
        })
        // console.log(new Date(1488930695721));
        var app1 = new Vue({
            el:"#app1",
            data:{
                timeNow:(new Date()).getTime(),
                timeBefore:1488930695721,//为了便于示范这里是一个写死的时间,且这个时间戳是毫秒级的
                //如果服务器返回的是秒级,需要乘以1000
                test:1488930695721
            },
            methods: {
                changeTest:function(e){
                    this.test = e.target.value;
                }
            },
            watch: {
                test:function(){
                    console.log(arguments);
                }
            },
        });
    </script>
    </html>

    框起来的部分是被我魔改了一下,为了实现一个输入时间戳执行时间转换的小测试~

  • 相关阅读:
    第04组 Beta冲刺 (2/5)
    第04组 Beta冲刺 (1/6)
    第04组 Alpha冲刺 总结
    二叉树的递归与非递归
    各类典例模板
    选择题合辑2
    运算符重载
    链表题目
    集合的模拟实现(类模板)
    2018Final静态成员(黑名单)
  • 原文地址:https://www.cnblogs.com/linbudu/p/11026707.html
Copyright © 2011-2022 走看看