Vue时间戳(年/月/日/时:分:秒and 刚刚/一分钟前···)

本文介绍如何在Vue中使用自定义过滤器处理时间戳,将10位和13位时间戳转化为易读的年/月/日/时:分:秒格式,并实现"刚刚"、"一分钟前"等相对时间显示。详细展示了过滤器的实现方法及实际应用效果。

<template>里面的内容

  <span class="shijian">
  {{item.create_at | dateFilters}}
  </span>

item.create_ataxios请求到的数据
dateFilters是调用时间过滤器的方法

<script>中的内容

 filters: {
    dateFilters: function(value) {
      var year = 24 * 60 * 60 * 1000 * 365;
      var month = 24 * 60 * 60 * 1000 * 30;
      var day = 24 * 60 * 60 * 1000;
      var hour = 60 * 60 * 1000;
      var minute = 60 * 1000;

      var newDate = new Date().getTime();
      var time = new Date(value).getTime();
      var date = newDate - time;

      var years =
        parseInt(date / year) > 0 ? `${parseInt(date / year)}年前` : "";
      var months =
        parseInt(date / month) > 0 ? `${parseInt(date / month)}月前` : "";
      var days = parseInt(date / day) > 0 ? `${parseInt(date / day)}天前` : "";
      var hours =
        parseInt(date / hour) > 0 ? `${parseInt(date / hour)}小时前` : "";
      var minutes =
        parseInt(date / minute) > 0 ? `${parseInt(date / minute)}分钟前` : "";

      if (years.length != 0) {
        return years;
      } else if (months.length != 0) {
        return months;
      } else if (days.length != 0) {
        return days;
      } else if (hours.length != 0) {
        return hours;
      } else if (minutes.length != 0) {
        return minutes;
      } else {
        return parseInt(date / 1000) > 0 ? `${parseInt(date / 1000)}秒前` : "";
      }
    }
  },

具体效果如图:

这个是比较复杂的时间过滤器
以上 这个是比较复杂的时间过滤器

简单易懂的在这里!!!

<template>里面的内容 跟上面是一样的

   <span class="shijian">
   {{item.time | timeFilter}}
   </span>

item.create_ataxios请求到的数据
timeFilter是调用时间过滤器的方法

<script>中的内容

filters: {
    timeFilter(ms) {
      let data = new Date();
      let now = data.getTime();
      let time = (now - ms) / 1000 / 60;
      let timeStr = "";
      if (time <= 1) {
        timeStr = "刚刚";
      } else if (time <= 2) {
        timeStr = "1分钟前";
      } else if (time <= 3) {
        timeStr = "2分钟前";
      } else if (time <= 4) {
        timeStr = "3分钟前";
      } else if (time <= 5) {
        timeStr = "4分钟前";
      } else if (time <= 6) {
        timeStr = "5分钟前";
      } else {
        let dat = new Date();
        dat.setTime(ms);
        // let y = dat.getFullYear(); //年
        let m = dat.getMonth(); //月
        let d = dat.getDate(); //日
        let h = dat.getHours(); //时
        let mm = dat.getMinutes(); //分
        let s = dat.getSeconds(); //秒
        timeStr = `${m}${d}${h}:${mm}:${s}`;
      }
      return timeStr;
    }
  },

效果如下图:
在这里插入图片描述

vue时间戳转换(10位数)/(13位)

<template>
  <!-- time为时间戳 -->
  <div>{{time | formatDate}}</div>
  <!-- 结果为 2018-01-23 18:31:35 -->
</template>

  export default {
    data() {
      return {
        time: 1516703495241//13位
      };
    },
    filters: {     
     formatDate: function (value) {//13位时间戳转换
        let date = new Date(value);
        let y = date.getFullYear();
        let MM = date.getMonth() + 1;
        MM = MM < 10 ? ('0' + MM) : MM;
        let d = date.getDate();
        d = d < 10 ? ('0' + d) : d;
        let h = date.getHours();
        h = h < 10 ? ('0' + h) : h;
        let m = date.getMinutes();
        m = m < 10 ? ('0' + m) : m;
        let s = date.getSeconds();
        s = s < 10 ? ('0' + s) : s;
        return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s;
        //结果为:1970-01-18 20:39:05类型
      }

	formatDate: function(value) {//10位时间戳转换
      let date = new Date(parseInt(value) * 1000);
      let y = date.getFullYear();
      let m = date.getMonth() + 1;
      m = m < 10 ? "0" + m : m;
      let d = date.getDate();
      d = d < 10 ? "0" + d : d;
      let h = date.getHours();
      h = h < 10 ? "0" + h : h;
      let minute = date.getMinutes();
      let second = date.getSeconds();
      minute = minute < 10 ? "0" + minute : minute;
      second = second < 10 ? "0" + second : second;
      return m + "月" + d + "日 " + h + ":" + minute + ":"+second; 
      //结果为 12月27日 11:31:17类型
      }
    }
  }
# 慢志平台概要设计方案 ## 一、全局可视化大屏 ### 1.1 设计目标 为管理者和运维人员提供数据库性能的全景视图,实现实监控和快速问题发现。采用深色主题设计,布局遵循"总--重点"的信息层次,顶部展示关键指标,中部呈现趋势析,底部聚焦资源消耗和告警信息。 ### 1.2 数据更新机制 采用双引擎驱动:数据通过WebSocket每30推送增量更新,历史统计数据每钟定轮询刷新。核心数据存储在Redis缓存中,确保快速响应。统计模块定从MySQL聚合计算后写入Redis,大屏直接读取缓存数据展示。 ### 1.3 核心展示模块 #### 慢SQL趋势析区 展示最近24小慢SQL数量曲线,支持1小/6小/12小/24小视图切换。曲线采用渐变色填充,超过阈值自动变为警示色。右上角显示增长率指标,对比昨和上周同期数据。 配套展示执行布环形图,按0-1、1-3、3-10、10以上四个区间统计。同展示影响行数趋势的双轴折线图,左轴为扫描行数,右轴为返回行数,直观反映查询效率。 所有图表支持交互下钻,点击曲线任意间点弹出该段详细SQL列表。 #### 资源消耗TOP排行榜 以页卡片形式展示四个维度的TOP10排名,通过标签页切换: - 执行长TOP10:展示平均执行长最长的SQL指纹 - 执行次数TOP10:展示调用频率最高的SQL,标注每总耗 - 扫描行数TOP10:展示全表扫描或大范围扫描的SQL,标注扫描返回比 - 锁等待TOP10:展示Lock_time最长的SQL 每条记录以卡片呈现,包含排名、SQL指纹、所属实例、业务标签和关键指标。提供快速操作按钮:查看详情、添加白名单、创建优化任务。使用Redis的Sorted Set存储TOP榜,每钟通过WebSocket推送变化。 #### 实例健康度矩阵 采用热力图展示所有MySQL实例健康状况,每个方块代表一个实例,颜色深浅反映健康评。 健康度评规则:慢SQL数量40%、平均执行长30%、锁等待长20%、扫描行数10%。评区间:90-100绿色(健康)、70-89黄色(预警)、70以下红色(告警)。 支持鼠标悬停显示详细指标tooltip,点击方块跳转实例详情页。顶部提供业务线筛选器,按业务维度过滤实例范围。 #### 告警统计面板 以信息卡片组合展示告警关键指标: - 今告警总数及与昨对比趋势,附带最近7天告警曲线 - 告警级别布堆叠柱状图(严重/警告/提示) - 未处理告警数量红色高亮显示,配合闪烁动画 - 告警响应长平均值,超过目标值显示红色预警 - 告警TOP5来源实例横向条形图 告警数据实更新,点击未处理告警数量弹出详细列表。告警触发后自动记录并通过钉钉、邮件、短信多渠道通知。 ### 1.4 技术要点 端采用ECharts图表库和DataV大屏组件库。WebSocket实现实推送,后端定任务从Redis获取数据推送给所有在线客户端。Redis缓存键采用层次化设计如"slowsql:trend:期",便于管理和过期控制。历史序数据可选用InfluxDB或MySQL区表存储。 ## 二、下钻析能力 ### 2.1 析模型设计 基于OLAP多维析模型,支持从宏观趋势逐层深入到具体SQL和执行细节,最终定位性能根因。 核心析维度: - 间维度:///小/钟多级粒度 - 业务维度:业务线/应用/模块三层级 - 数据库维度:实例/数据库名/表名 - SQL维度:SQL指纹/SQL类型(SELECT/UPDATE/DELETE/INSERT) - 性能维度:执行长区间/扫描行数区间 维度间可自由组合,支持复杂的交叉析查询。 ### 2.2 页面布局结构 采用"筛选-展示-详情"三段式布局: **筛选条件区域**(顶部固定): 第一行:业务线选择、实例选择、数据库选择、间范围选择 第二行:执行长阈值、扫描行数阈值、SQL类型、标签筛选 支持级联联动,选择业务线后实例和数据库自动过滤。提供保存筛选方案、一键清空、导出结果功能。实显示当结果数量。 **析结果展示区域**(中部): 采用多标签页组织,包括SQL指纹列表、序趋势析、析、原始志查询四个视图。 ### 2.3 SQL指纹列表视图 表格形式展示聚合后的SQL指纹,每行包含: - SQL指纹(脱敏后模板,支持点击展开完整SQL) - 执行次数 - 平均/最大执行(超过阈值显示警示色) - 平均扫描行数/返回行数 - 平均锁等待长 - 涉及表名 - 所属实例和业务标签 - 操作按钮(详情/加白名单/创建任务) 支持按任意列排序,默认按平均执行长降序。支持多选批量操作。SQL指纹采用代码高亮提升可读性。 ### 2.4 序趋势析视图 双轴折线图展示慢SQL间维度变化: - 横轴:间,根据筛选范围自动调整刻度 - 左轴:执行次数(柱状图) - 右轴:平均执行(折线图) 支持间范围缩放,在间轴上拖动选择子区间放大查看。提供按钟/小/天/周四种粒度切换。支持对比上周或上同期数据,使用虚线叠加显示。点击数据点弹出该刻详细信息。 ### 2.5 析视图 通过统计图表揭示多维度布特征: - 执行布直方图:显示SQL在各长区间的数量布 - 扫描行数布直方图:采用对数尺度区间,识别全表扫描SQL - 数据库/表维度同心圆饼图:外圈显示数据库布,内圈显示表布,支持点击下钻 - SQL类型占比饼图:按SELECT/UPDATE/DELETE/INSERT类统计 所有图表支持联动交互,点击一个图表的某个区域,其他图表自动过滤对应数据。 ### 2.6 原始志查询视图 详细表格展示每条原始慢志记录: - 执行时间戳 - 完整SQL语句(带参数值,代码高亮) - 执行长/锁等待长 - 扫描行数/返回行数 - 执行用户/客户端IP 支持二次筛选和全文搜索,高亮关键词。采用虚拟滚动技术处理大数据量。提供导出CSV功能,大数据量采用异步任务处理,完成后通知下载。 ### 2.7 根因析功能 点击SQL指纹详情按钮进入深度析页面,包含多个析维度: **执行计划析**:调用在线SQL析模块,连接数据库执行EXPLAIN,展示执行计划结果,高亮全表扫描、filesort、临表等问题点,给出索引优化建议。 **析**:按小/天/周展示该SQL执行长波动,识别性能突变间点,可关联数据库负载指标析。 **参数析**:对参数化查询,展示不同参数值的性能差异,识别导致慢查询的特定参数。 **关联析**:展示同间段其他慢SQL,析是否存在锁竞争或资源争抢。 **历史对比**:对比该SQL在过去7天/30天的性能趋势,识别性能退化。 **智能建议引擎**:基于规则给出优化建议,如全表扫描建议加索引、高锁等待建议检查事务、高扫描返回比建议优化条件等。 ### 2.8 技术实现要点 数据库采用区表设计,按天或区,在时间戳、SQL指纹、实例、业务标签等字段上建立复合索引,加速多维查询。热点查询结果缓存到Redis,TTL设置5钟。大结果集不缓存,避免内存压力。异步导出使用后台任务队列处理,生成文件后上传到文件服务器或OSS,通知用户下载链接。 ## 三、任务跟踪看板 ### 3.1 任务管理架构 采用工作流引擎管理优化任务全生命周期,状态流转:待处理 → 已配 → 进行中 → 待验证 → 已完成,支持驳回和搁置状态。 ### 3.2 看板视图设计 提供看板视图和列表视图双模式: **看板视图**(默认):类似Jira的泳道看板,按状态列展示任务卡片。支持拖拽卡片改变状态,直观反映任务流转。 任务卡片内容: - 任务编号和标题 - 业务/实例信息 - SQL指纹摘要 - 当性能指标 → 目标指标 - 负责人/截止间 - 优先级(P0/P1/P2/P3)和标签 **列表视图**:传统表格形式,支持按任意字段排序和高级筛选,适合查找特定任务。 ### 3.3 任务创建流程 四个创建入口:大屏TOP榜、下钻析页、告警通知、手动新建。 创建表单包含: - 任务标题(自动生成或手动输入) - 关联SQL指纹(自动关联或搜索) - 所属实例和业务 - 问题描述(富文本,支持截图) - 当性能指标(平均长/执行次数/影响用户数) - 优化目标(目标长/预计收益) - 优先级/负责人/协作人 - 计划间和标签 ### 3.4 任务详情页设计 **顶部信息区**:任务编号、标题、状态徽章、创建人、负责人、协作人、优先级、截止间。 **Tab页内容**: - 任务详情:问题描述、关联SQL、性能指标对比、附件列表 - 优化方案:富文本记录根因析、优化方案(支持多备选)、EXPLAIN对比、预期效果 - 执行记录:间轴展示任务进展,记录创建、配、方案添加、SQL变更、验证等关键节点 - 性能对比:图表展示优化后执行长、次数、扫描行数、数据库负载对比 **底部操作区**:根据任务状态显示不同操作按钮,如配、开始处理、提交验证、验证通过/失败、驳回、搁置、重新打开、归档等。 ### 3.5 智能提醒推送 提醒规则: - 任务:钉钉/邮件通知负责人 - 即将到期:2天钉钉提醒 - 任务逾期:钉钉提醒,抄送Leader - 状态变更:通知相关人员 - 评论@:通知被@人员 ### 3.6 统计看板 看板顶部展示统计数据: - 本周新增/完成任务数 - 任务完成率 - 平均处理长 - 逾期任务数(红色高亮) - 我的待办任务数 ### 3.7 自动化功能 **自动性能验证**:任务提交验证后,系统自动查询最近1小该SQL指纹的平均执行长,对比目标值,生成验证结果建议(通过/未达标)。 **定监控**:每天定检查逾期任务,向负责人发送提醒,高优先级任务抄送Leader。 **任务推荐**:析历史优化任务效果,为新出现的慢SQL推荐相似的优化方案。 ### 3.8 技术实现要点 数据库设计包含任务主表、协作人关联表、操作志表、附件表。任务主表在负责人、状态、截止间等字段建立索引,优化查询性能。 看板拖拽基于端拖拽组件实现,拖拽后调用API更新任务状态,通过WebSocket通知其他在线用户刷新看板,保证多人协作数据一致性。 任务操作志完整记录每次变更,包含操作人、操作类型、变更内容、时间戳,支持任务审计和回溯。 ## 四、系统集成方案 ### 4.1 整体架构 端采用Vue3 + ECharts + DataV + Element Plus,应用层使用Spring Boot + WebSocket,数据层包含MySQL(业务数据)、Redis(缓存/队列)、可选InfluxDB(序数据)。 ### 4.2 核心数据流 慢志从Kafka消费后,采集模块生成SQL指纹并写入文件,pt工具解析后统计数据入库MySQL。定聚合任务和准实流式统计双轨运行,结果写入Redis缓存。大屏和下钻析从Redis和MySQL读取数据展示。 ### 4.3 中间件选型 - 消息队列:Kafka(已有) - 缓存:Redis(热点数据、实指标、布式锁) - 实通信:WebSocket(Spring Boot内置) - 任务调度:Spring @Scheduled - 通知推送:钉钉机器人/企业微信机器人 - 文件存储:本地文件系统或MinIO/OSS ### 4.4 关键特性 - 实:WebSocket推送保证大屏30延迟,告警即通知 - 可扩展:多维析模型支持灵活增加新维度 - 易用性:丰富的交互下钻,一键创建优化任务 - 智能化:自动性能验证,智能优化建议 - 协作性:任务看板支持多人协作,状态实同步
最新发布
11-25
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值