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>

从代码中,我们可以看到,这是将代码封装成了一个指令,且加入“每隔一分钟更新一次”的功能,也就是说每分钟都会更新一下信息的发布时间距离当前时间的时间差。

该指令会实时将信息发布的时间转换成几分钟前、几小时前、几天前,但是超过一个月的,就展示的是信息发布时的带有日期格式的日期了。

原文地址:https://www.cnblogs.com/tnnyang/p/11684673.html

时间: 2024-10-16 13:16:00

vue将接口返回的日期实时转换为几分钟前、几小时前、几天前的相关文章

vue 根据接口返回的状态码判断用户登录状态并跳转登录页

背景:后台接口返回code==501表示用户是未登录状态,需要登录才可访问: main.js中通过http拦截做路由跳转 import Vue from 'vue' import Axios from 'axios' Vue.prototype.$axios = Axios import { Loading, Message, MessageBox } from 'element-ui' // 超时时间 Axios.defaults.timeout = 5000 // http请求拦截器 var

vue 根据接口返回的状态码判断(http拦截器)

import Axios from 'axios' import { Loading, Message } from 'element-ui' // 超时时间 Axios.defaults.timeout = 5000 // http请求拦截器 let loadinginstace Axios.interceptors.request.use(config => { // element ui Loading方法 loadinginstace = Loading.service({ fullsc

微信服务开发——读取百度音乐接口返回音乐

最近用了很多网上的坑爹接口,都泪奔了,不说了,都是泪啊~ 前两天做了个微信返回音乐的接口,先来看下效果: 出来之后在手机微信里面就可以实现音乐播放了. 技术很简单,首先访问百度音乐接口,传入音乐名称和歌手名称,然后百度会返回一个XML格式给你,里面包括音乐的链接地址等信息.但是比较坑爹的是,这里的链接地址是写在两个node里面的,我要先从一个encode里面拿到前半段,然后再从deconde里面拿到后半段,然后拼起来,拿到URL之后,就要把这个信息放到返回给用户的音乐信息里面. 先来看下微信里面

vue调用接口那些事

前后端分离听了无数遍,本质就是后端只写接口,前端写界面.理想化的方案,后端搭数据库,写后端界面功能,写接口api.前端写vue,依据本地的json文件写数据呈现的样式.后来,发现前后端有个时间差,于是,前端把需要用到的json文件放到网上(比如[www.easy-mock.com等平台),这样后端可以紧跟前端脚步,同步编写项目的api接口.其实还一个比较模糊的事情,交互谁来写(如果后端返回空数据怎么办,如果用户没有登录怎么处理,分页加载/刷新需求的实现)?vue项目在npm run build完

Postman 如何处理上一个接口返回值作为下一个接口入参?

今天做接口测试,有一个接口的参数是一个校验 token,会实时更新,开发提供了一个单独返回实时 token 的接口,所以就需要在功能接口使用时调用 token 接口的返回值,作为功能接口的参数来使用. 网上搜了一下,都没有现成的使用说明,刚才研究出来了,就记录下步骤,方便后面的同学. 如果返回 token 的接口的返回值,是标准的 JSON 格式的话,就很简单的两步就行了. 1.token 接口设置全局变量 第一步就是执行 token 接口,并把接口返回值里面的 token 值,赋值给一个全局变

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

博客地址:https://ainyi.com/79 日常浏览网页中,在进行窗口的 resize.scroll 或者重复点击某按钮发送请求,此时事件处理函数或者接口调用的频率若无限制,则会加重浏览器的负担,界面可能显示有误,服务端也可能出问题,导致用户体验非常糟糕 此时可以采用 debounce(防抖)和 throttle(节流)的方式来减少事件或接口的调用频率,同时又能实现预期效果 防抖:将几次操作合并为一此操作进行.原理是维护一个计时器,规定在 delay 时间后触发函数,但是在 delay

浏览器端对服务器端返回的日期的处理方式

用javascript的 Date 函数来处理:     var date=jQuery.parseJSON(data)将返回的数据解析成为jQuery对象.     var start = new Date(date);     var year = start.getFullYear();     var month = start.getMonth();     var day = start.getDate(); 浏览器端对服务器端返回的日期的处理方式,布布扣,bubuko.com

接口返回值结果转换成JSON

接口返回值结果转换成JSON,具体的方法如下: public static String GetJsonValue(String result,int index,String key){ int indexloc,indexkey; String newstr; indexloc=result.indexOf("["); indexkey=result.indexOf(key); //判断Data域的内容 if (( indexloc>indexkey || indexloc=

C#接收xmlrpc接口返回哈希表格式

C#在调用xmlrpc接口时返回的是int值就可以直接获取,最近在调用一个接口是获取一个账号记录的详细信息,xmlrpc接口返回的是一个哈希值. 所以直接用int或者Hashtable 来获取返回值执行都会出现错误,后来在网上搜索了一下,原来在CookComputing.XmlRpcV2.dll里有专门获取此类的结果. 那就是xmlrpc的结构体,变量是:XmlRpcStruct //获取账号信息调用 [XmlRpcMethod("middler.getUserDetailInfo")