vue将接口返回的日期实时转换为几分钟前、几小时前、几天前
项目开发中,各种需求都会遇到,有些需求很合理,也好实现,有些需求不能说不合理,就是太麻烦,就比如类似标题所描述这种的需求,你不能说它是不合理的需求,因为很多论坛或微博、朋友圈、QQ空间之类的这种效果还是很常见的,能让我们一眼就看到这些信息是什么时候发的,而且这些时间基本都是实时自动更新的,给人的感觉很友好。
而在我们公司的后台管理项目中,恰好也有这样的需求,感觉很时髦、很潮流,所以在我们前端开发的时候,我就顺便把这样的效果给做了出来。后来在和写接口的同事开会对字段的时候,写接口的同事说这个功能他们来做,而且他们已经费劲八叉的给实现了,于是就出现了前端也费劲八叉的给实现后与接口冲突的戏剧效果,接着大家就哈哈大笑。会议在热烈、友好、祥和的氛围中圆满结束,会议还就双方共同关心的问题深入交换了意见,达成了“一致开发、协同合作”的初步意向,与会的同事有前端开发人员、接口开发人员、测试人员。
说了那么多,装了那么多的逼,都不如贴出代码来的实际。
time.js
import Vue from 'vue'
/**
* 实时时间转换指令,大于一个月则返回具体的年月日
* @param { string } timeStamp - 时间 格式:年-月-日 时:分:秒 或 时间戳
* @returns { string }
*/
function getFormatTime(timeStamp){
var dateTime = new Date(timeStamp);
var no1new = dateTime.valueOf();
var year = dateTime.getFullYear();
var month = dateTime.getMonth() + 1;
var day = dateTime.getDate();
var hour = dateTime.getHours();
var minute = dateTime.getMinutes();
var second = dateTime.getSeconds();
var now = new Date();
var now_new = now.valueOf();
var milliseconds = 0;
var timeSpanStr;
milliseconds = now_new - no1new;
if (milliseconds <= 1000 * 60 * 1) {
timeSpanStr = '刚刚';
}else if (1000 * 60 * 1 < milliseconds && milliseconds <= 1000 * 60 * 60) {
timeSpanStr = Math.round((milliseconds / (1000 * 60))) + '分钟前';
}else if (1000 * 60 * 60 * 1 < milliseconds && milliseconds <= 1000 * 60 * 60 * 24) {
timeSpanStr = Math.round(milliseconds / (1000 * 60 * 60)) + '小时前';
}else if (1000 * 60 * 60 * 24 < milliseconds && milliseconds <= 1000 * 60 * 60 * 24 * 15) {
timeSpanStr = Math.round(milliseconds / (1000 * 60 * 60 * 24)) + '天前';
}else if (milliseconds > 1000 * 60 * 60 * 24 * 15 && year == now.getFullYear()) {
// timeSpanStr = year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second;
timeSpanStr = year + '-' + month + '-' + day
}else {
// timeSpanStr = year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second;
timeSpanStr = year + '-' + month + '-' + day
}
return timeSpanStr;
}
Vue.directive('time', {
bind: function(el, binding){
el.innerHTML = getFormatTime(binding.value);
//每隔一分钟更新一次
el.__timeout__ = setInterval(function(){
el.innerHTML = getFormatTime(binding.value);
}, 60000);
},
unbind: function(el){
clearInterval(el.__timeout__);
delete el.__timeout__;
}
});
使用方法:
<template>
<p v-time="timeNow"></p>
</template>
<script>
import './time.js'
export default {
data(){
return {
timeNow: 1571111617
}
}
}
</script>
从代码中,我们可以看到,这是将代码封装成了一个指令,且加入“每隔一分钟更新一次”的功能,也就是说每分钟都会更新一下信息的发布时间距离当前时间的时间差。
该指令会实时将信息发布的时间转换成几分钟前、几小时前、几天前,但是超过一个月的,就展示的是信息发布时的带有日期格式的日期了。
vue将接口返回的日期实时转换为几分钟前、几小时前、几天前的更多相关文章
- vue 根据接口返回的状态码判断用户登录状态并跳转登录页,登录后回到上一个页面(http拦截器)
背景:后台接口返回code==501表示用户是未登录状态,需要登录才可访问: 通过http拦截做路由跳转 第一步:src目录下新建http.js文件,内容如下: import Axios from ' ...
- vue v-time指令封装(接口返回时间戳 在到日期转换)
// 全局时间戳转换指令注册Vue.directive('time',{ bind: function (el,binding) { let getTime = new Date(binding.va ...
- 接口返回图片,前端生成临时url实现展示、下载效果
请求一个后端接口 返回一张图片(打印后发现是二进制流) 瞬间不开心了(为什么不能后端处理好再让前端调用呢) 不过丝毫不慌好吧 先说处理逻辑:首先要将获取到的数据转换,这边选择以blob形式进行转换 主 ...
- 【Golang 接口自动化04】 解析接口返回JSON串
前言 上一次我们一起学习了如何解析接口返回的XML数据,这一次我们一起来学习JSON的解析方法. JSON(Javascript Object Notation)是一种轻量级的数据交换语言,以文字为基 ...
- Vue从接口请求数据
<!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...
- 防抖与节流 & 若每个请求必须发送,如何平滑地获取最后一个接口返回的数据
博客地址:https://ainyi.com/79 日常浏览网页中,在进行窗口的 resize.scroll 或者重复点击某按钮发送请求,此时事件处理函数或者接口调用的频率若无限制,则会加重浏览器的负 ...
- WebService如何封装XML请求 以及解析接口返回的XML
原 WebService如何封装XML请求 以及解析接口返回的XML 置顶 2019年08月16日 15:00:47 童子泛舟 阅读数 28 标签: XML解析WebService第三方API 更多 ...
- mssql sqlserver 如何将一个日期数据转换为"年份-月份"的格式呢?
摘要: 下文讲述在sqlserver数据库中,将日期数据转换为指定格式的方法分享,如下所示: 实验环境:sqlserver 2008 R2 实现思路: 实现方法1: 使用year函数和month函数获 ...
- vue项目接口管理,所有接口都在apis文件夹中统一管理
参考:https://www.codercto.com/a/53432.html 在vue开发中,会涉及到很多接口的处理,当项目足够大时,就需要定义规范统一的接口,如何定义呢? 方法可能不只一种,本文 ...
随机推荐
- JavaScript setTimeout this对象指向问题
上面这幅图片是原始的效果, 现在想鼠标移到图标上,显示图标的提示,但需要延时,也就是鼠标滑至图标上,并不立刻显示,而是等1秒后显示. html部分 <div class="porHea ...
- [转][ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [下篇]
由于ASP.NET Core框架在本质上就是由服务器和中间件构建的消息处理管道,所以在它上面构建的应用开发框架都是建立在某种类型的中间件上,整个ASP.NET Core MVC开发框架就是建立在用来实 ...
- 使C# WebApi返回Json
找到Global.asax文件,在Application_Start()方法中添加一句: protected void Application_Start() { AreaRegistration.R ...
- tensorflow学习笔记(四十五):sess.run(tf.global_variables_initializer()) 做了什么?
当我们训练自己的神经网络的时候,无一例外的就是都会加上一句 sess.run(tf.global_variables_initializer()) ,这行代码的官方解释是 初始化模型的参数.那么,它到 ...
- SQL2008 R2安装完成后开启services服务指引和 sa账号启用、数据类型
- H3C 路由表查找规则(3)
- 小程序 scroll-view 左右横向滑动没有效果(无法滑动)问题
scroll-view 中的需要滑动的元素不可以用 float 浮动:
- 僵进程与SIGCHLD信号
参考: https://www.cnblogs.com/webor2006/p/4014586.html wait()和waitpid()的参数解析:https://blog.csdn.net/csd ...
- [wireshark] ip filter
查ip 时,使用 ip==10.224.37.18 发现无效 使用 ip.dst, 查到了 Match destination: ip.dst == x.x.x.x Match source: ip. ...
- PHP四大主流框架的优缺点总结
本篇文章我们来讲讲PHP四大框架的优缺点都有哪些,让你们在开发中更好的去选择使用哪款PHP框架去完成项目,废话不多说,我们一起来看看吧!! ThinkPHP ThinkPHP(FCS)是一个轻量级的中 ...