前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vue 日期时间转为XX时间前展示

vue 日期时间转为XX时间前展示

作者头像
朝雾轻寒
修改2020-06-09 17:18:30
1.8K0
修改2020-06-09 17:18:30
举报

问题描述

项目中常常需要将发布的文章时间展现为“XX时间前”,如“1分钟前”、“2小时前”、“3天前”等等。

解决方案

1.vue-timeago
安装timeago.js
代码语言:javascript
复制
yarn add vue-timeago

# 或者

npm i vue-timeago
引入timeago.js
代码语言:javascript
复制
import Vue from 'vue'

import VueTimeago from 'vue-timeago'



Vue.use(VueTimeago, {

    name: 'Timeago', // Component name, `Timeago` by default

    locale: 'zh-CN', // Default locale

    locales: {

        'zh-CN': require('date-fns/locale/zh_cn'),

        ja: require('date-fns/locale/ja')

    }



})
使用
代码语言:javascript
复制
<timeago :datetime="time"></timeago>



<!-- 每60秒更新 -->

<timeago :datetime="time" :auto-update="60"></timeago>



<!-- 自定义 locale -->

<timeago :datetime="time" locale="zh-CN"></timeago>
展现效果
2.自定义date.js
自定义工具
代码语言:javascript
复制
/**

 * @desc 格式化日期字符串

 * @param { String} - 日期时间字符串

 * @returns { String } 格式化后的日期字符串

 */

export function formatDate(value) {

    // 注意ie和firefox浏览器时间格式兼容性

    let timestamp=new Date(value.replace(/-/g,"/").getTime();

    // 补全为13位

    let arrTimestamp = (timestamp + '').split('');

    for (let start = 0; start < 13; start++) {

      if (!arrTimestamp[start]) {

        arrTimestamp[start] = '0';

      }

    }

    timestamp = arrTimestamp.join('') * 1;

    let minute = 1000 * 60;

    let hour = minute * 60;

    let day = hour * 24;

    let month = day * 30;

    let now = new Date().getTime();

    let diffValue = now - timestamp;

    // 如果本地时间反而小于变量时间

    if (diffValue < 0) {

      return '不久前';

    }

    // 计算差异时间的量级

    let yearC = diffValue / (month*12);

    let monthC = diffValue / month;

    let weekC = diffValue / (7 * day);

    let dayC = diffValue / day;

    let hourC = diffValue / hour;

    let minC = diffValue / minute;

    // 数值补0方法

    let zero = function (value) {

      if (value < 10) {

        return '0' + value;

      }

      return value;

    };

    // 使用

    if (yearC >= 1) {

      // 超过1年,直接显示年月日

      return (function () {

        let date = new Date(timestamp);

        return date.getFullYear() + '年' + zero(date.getMonth() + 1) + '月' + zero(date.getDate()) + '日';

      })();

    } else if (monthC >= 1) {

      return parseInt(monthC) + '月前';

    } else if (weekC >= 1) {

      return parseInt(weekC) + '周前';

    } else if (dayC >= 1) {

      return parseInt(dayC) + '天前';

    } else if (hourC >= 1) {

      return parseInt(hourC) + '小时前';

    } else if (minC >= 1) {

      return parseInt(minC) + '分钟前';

    }

    return '刚刚';

  }
页面引入
代码语言:javascript
复制
 import { formatDate } from '~/plugins/date';
方法定义
代码语言:javascript
复制
 getFormatDate(val){

          return formatDate(val);



 }
html使用
代码语言:javascript
复制
{{getFormatDate(publishTime)}} #publishTime为日期时间字符串
展示效果

小结

在使用vue-timeago无法去除“大约”这个字样,只得自定义js。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 朝雾轻寒的博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述
  • 解决方案
    • 1.vue-timeago
      • 安装timeago.js
      • 引入timeago.js
      • 使用
      • 展现效果
    • 2.自定义date.js
      • 自定义工具
      • 页面引入
      • 方法定义
      • html使用
      • 展示效果
  • 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档