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>

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM