项目开发中,各种需求都会遇到,有些需求很合理,也好实现,有些需求不能说不合理,就是太麻烦,就比如类似标题所描述这种的需求,你不能说它是不合理的需求,因为很多论坛或微博、朋友圈、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将接口返回的日期实时转换为几分钟前、几小时前、几天前的更多相关文章

  1. vue 根据接口返回的状态码判断用户登录状态并跳转登录页,登录后回到上一个页面(http拦截器)

    背景:后台接口返回code==501表示用户是未登录状态,需要登录才可访问: 通过http拦截做路由跳转 第一步:src目录下新建http.js文件,内容如下: import Axios from ' ...

  2. vue v-time指令封装(接口返回时间戳 在到日期转换)

    // 全局时间戳转换指令注册Vue.directive('time',{ bind: function (el,binding) { let getTime = new Date(binding.va ...

  3. 接口返回图片,前端生成临时url实现展示、下载效果

    请求一个后端接口 返回一张图片(打印后发现是二进制流) 瞬间不开心了(为什么不能后端处理好再让前端调用呢) 不过丝毫不慌好吧 先说处理逻辑:首先要将获取到的数据转换,这边选择以blob形式进行转换 主 ...

  4. 【Golang 接口自动化04】 解析接口返回JSON串

    前言 上一次我们一起学习了如何解析接口返回的XML数据,这一次我们一起来学习JSON的解析方法. JSON(Javascript Object Notation)是一种轻量级的数据交换语言,以文字为基 ...

  5. Vue从接口请求数据

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. 防抖与节流 & 若每个请求必须发送,如何平滑地获取最后一个接口返回的数据

    博客地址:https://ainyi.com/79 日常浏览网页中,在进行窗口的 resize.scroll 或者重复点击某按钮发送请求,此时事件处理函数或者接口调用的频率若无限制,则会加重浏览器的负 ...

  7. WebService如何封装XML请求 以及解析接口返回的XML

    原 WebService如何封装XML请求 以及解析接口返回的XML 置顶 2019年08月16日 15:00:47 童子泛舟 阅读数 28 标签: XML解析WebService第三方API 更多 ...

  8. mssql sqlserver 如何将一个日期数据转换为"年份-月份"的格式呢?

    摘要: 下文讲述在sqlserver数据库中,将日期数据转换为指定格式的方法分享,如下所示: 实验环境:sqlserver 2008 R2 实现思路: 实现方法1: 使用year函数和month函数获 ...

  9. vue项目接口管理,所有接口都在apis文件夹中统一管理

    参考:https://www.codercto.com/a/53432.html 在vue开发中,会涉及到很多接口的处理,当项目足够大时,就需要定义规范统一的接口,如何定义呢? 方法可能不只一种,本文 ...

随机推荐

  1. clone() 方法

    <html> <head> <script type="text/javascript" src="/jquery/jquery.js&qu ...

  2. 2018-8-10-C#-代码占用的空间

    title author date CreateTime categories C# 代码占用的空间 lindexi 2018-08-10 19:16:52 +0800 2018-2-13 17:23 ...

  3. H3C DHCP服务器可选配置

  4. Java零散记录

    接口不能被实例化,所以其成员变量必须为不可修改的,就是常量.

  5. dotnet 获取用户设备安装了哪些 .NET Framework 框架

    从注册表可以拿到当前用户安装的 .NET Framework 版本,本文告诉大家如何解析这些信息 在注册表的当前设备的 SOFTWARE\Microsoft\NET Framework Setup\N ...

  6. HttpRepl 互操作的 RESTful HTTP 服务调试命令行工具

    今天早上曽根セイラ告诉我一个好用的工具 HttpRepl 这是一个可以在命令行里面对 RESTful 的 HTTP 服务进行路由跳转和访问的命令行工具.可以使用 cd 这个命令和像文件跳转已经跳转到下 ...

  7. AndroidStudio手动安装插件

    由于网络原因,android studio 的插件市场经常不能打开或者不能下载,这种情况我们可以手动下载插件的压缩包,再手动安装. 第一步,打开https://plugins.jetbrains.co ...

  8. U8 EAI实现XML的生成

    /*************************************************************************************************** ...

  9. 更新到@vue/cli 4.1.1版本的前端开发前的准备

    一.概念简述 1.node.js目的是提供一个JS的运行环境. 2.npm(node package manager)是一个JS包管理器. 二.检查自己的电脑是否已安装相关配置 1.查看node.js ...

  10. 第二阶段:2.商业需求文档MRD:4.MRD-核心目标-产品构成

    竞争对手分析很重要.之后单独讲解.产品经理时刻要关注竞争产品的状态. 1.不同于PRD.这里只是概况.2.产品前景的核心目标就是:KPI(用户使用量:安装量,卸载量,日活数)跟ROI(开发人力,时间, ...