前言:

使用d3绘制时间轴图表,不可避免的涉及到动态变动时间刻度,根据业务需求需要调整查看不同的时间粒度数据。如果后台数据非连续数据,需要前端自己处理的话,就得自己根据时间范围创建时间刻度数据。

一、js根据时间范围创建时间刻度数据:

/*

*@params startDate 开始时间

*@params endDate 结束时间

*@params timeUnit 时间间隔,注意是毫秒数

**/

function createTimeUnitListByTimeRange(startDate, endDate, timeUnit){

let startSeconds = new Date(startDate).getTime();

let endSeconds = new Date(endDate).getTime();

// 必须用计算机初始时间的时间戳来作为基准点,否则时区会影响初始时间戳毫秒数

let base = new Date('1970-01-01 00:00:00').getTime();

let rangeTimeUnitList = [];

let firstDegree;

// 第一个刻度,可能刚好在你需要的整点刻度上,如果不在整点上,减去多余的部分,往前推一个刻度。

// 此处就是减掉基准时间戳再执行整除操作,否则如果以天为刻度,整除86400000,得到的第一个刻度会是包含时区的时间,如北京时间:2020-09-10 08:00:00

firstDegree = startSeconds - (startSeconds - base) % timeUnit;

rangeTimeUnitList.push(firstDegree);

// 当最后一个刻度大于截止时间,停止创建刻度数据

while(firstDegree

firstDegree += timeUnit;

rangeTimeUnitList.push(firstDegree);

}

return rangeTimeUnitList;

}

console.log(createTimeUnitListByTimeRange('2020-01-01','2020-09-10',86400000), '测试');

以上方法,亲测有效。注意一定要使用固定的时间作为基准点,否则以天为刻度时,会有时区差异。以秒和分钟作为时间粒度,没问题,因为是更小一级的单位,进行整除运算没有问题。

二、常用的时间刻度:

60000 分钟桶

600000 十分钟桶

3600000 小时桶

86400000 天桶

时间桶的概念,就是以该间隔作为时间刻度

三、多说一句

为什么我会前端处理时间轴数据?

相信如果使用过d3进行时间轴图表定制的同学,一定使用过d3.scaleTime或者d3.scaleUtc进行时间轴比例尺的绘制,它的智能之处,就是可以根据你的时间范围,动态的创建出适合当前显示区域坐标系的时间刻度数据,就算你的数据是不连续的,也没有问题。但是结合brush刷取api进行使用的时候就用问题了,当初始化数据不符合具体的刷取机制,进行刷取范围的默认设置,就会出现绘制图表不连续,移动刷取框更新图表错误的问题。(具体原因未知,有大神有相应的认知可以在评论群告知一波,非常感谢)

基于以上问题,我通过自己创建时间刻度,使用d3.scaleLinear 线性比例尺,结合brush进行缩放x轴,就没有任何问题,因为我的数据处理后都是连续的,每个时间刻度已经固定,规避了上面的问题。

js手机端时间区间_js根据时间范围生成时间刻度数据相关推荐

  1. JS手机端移动端长按longtap事件

    JS手机端移动端长按longtap事件移动端并没有所谓的longtap事件,即长按事件.但是,有时候会用到,只能借助touchstart.touchmove.touchend三个事件以及延迟setTi ...

  2. zepto.js手机端开宝箱动画js特效

    下载地址 zepto.js实现的手机端开宝箱动画特效 dd:

  3. JS 手机端摇一摇 苹果IOS13.3高版本处理

    苹果IOS13.3高版本需要 动作与方向授权以后才能进行摇一摇,授权过程必须有点击才能授权.在进入需要摇一摇的页面的时候可以进行授权,在进行提示点击我用的是手机端swal插件进行提示点击授权. 拒绝授 ...

  4. js手机端时间区间_js 时间区间

    对于页面加载时间的测试,简单的需求(仅仅是看看请求时间消耗分布)可以通过开发者工具或者Http Watch了解,但如果是想对页面加载进行优化,进行深入了解的(例如:渲染过程中的CPU开销.网络传输时间 ...

  5. Vue.js 手机端H5,时间选择器实现:年月日时分秒、年月日时分、年月日时、年月日、年月、年、月、日、时、分、秒,时分秒、时分多种类型

    目录 一.效果查看 时间选择器实现效果视频 二.目录 三.index.vue <template><div><date-picker keys="0" ...

  6. js 手机端网站底部悬浮html广告代码

    首先底部悬浮html 代码如下,这里因为我自己的需求,所以改成了轮播 底部悬浮代码 <!--WAP底部悬浮--> <style> @media screen and (max- ...

  7. js手机端下拉刷新效果demo效果示例(整理)

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...

  8. js 手机端触发事事件、javascript手机端/移动端触发事件

    处理Touch事件能让你跟踪用户的每一根手指的位置.你可以绑定以下四种Touch事件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

  9. js手机端图片弹出方法

    1 $("img").click(function(){ //获取窗口可视大小 2 var width=$(window).width(); 3 var height=$(wind ...

最新文章

  1. 关于网页显示乱码问题的一些个人见解(PHP、JSP...)
  2. day20-自定义分页2
  3. 【Linux 内核】CFS 调度器 ② ( CFS 调度器 “ 权重 “ 概念 | CFS 调度器调度实例 | 计算进程 “ 实际运行时间 “ )
  4. Logical Volume Manager(逻辑卷管理)
  5. 科大星云诗社动态20210810
  6. java jdk 类加载机制_JDK源码阅读之类加载
  7. 最大和 -- 最大子矩阵
  8. mysql+秘密_mysql不被人知的秘密
  9. java中的网络入门2(J2SE入门19)
  10. 《云计算:原理与范式》一3.6 新集成方案
  11. 【ClearCase 学习笔记 】之(1/4)CC四大功能概述
  12. 顶级期刊:关于提升人体免疫力的一切!5点有益建议
  13. 人像抠图处理百度API接口调用
  14. 首都师范 博弈论 2 2 4划线法
  15. STC12LE5612AD芯片使用心得(五)定时器
  16. 腾讯视频、爱奇艺、豆果美食等为线下贷款中介导流、个人信息遭倒卖
  17. 自己的微信小程序学习笔记【1】——小程序开发工具的使用及项目文件说明
  18. snipaste 方便快捷截图工具
  19. PDF转图片怎么转?分享两种转换小技巧
  20. 给ESXI添加自定义网卡驱动

热门文章

  1. Linux命令详细总结(万字总结值得一看)
  2. 电脑开机出现英文字母开不了机U盘重装系统教学
  3. 猫游记开源_如果您是猫,如何参与开源
  4. 如果我的猫也会写字——猫的日记猜想
  5. 2021全新Android大厂面试真题解析(含网络、Java、Android
  6. Scala学习(二)groupByKey和reduceByKey
  7. Java 必知必会——什么是对象引用?按值传递 OR 按引用传递?
  8. 两个有序顺序表合并成一个有序顺序表
  9. video-editing
  10. python计算一个矩阵的主对角线_python – 使用numpy获取多维数组的所有对角线(包括次要对角线)...