【写在前面】前些日子忙了几天有关指标对比分析的功能,因为系统是对接券商类的业务,所以他们比较关注的是工作日的数据波动,因此前端指标对比数据需要拿工作日的,不然他们停市的数据比较也没用,故而今天针对之前实现的做一个对比,首先给大家看一下时间线的对比效果。

针对这个echarts的效果实现大家可以看我的之前的文章哈。

一、效果展示

这篇文章我们就针对工作日的时间计算做个总结哈,首先我们需要有一个当前对比基准值,下面我写了一个小demo给大家看看效果;

这个是我基于今年(2022年)的国庆节后做的一个测试,测试数据很OK,下面就带大家来看看怎么实现的吧;

二、实现过程

1、准备一个节假日数组
这个存在不定因素,因为每年的节假日都是国务院发布的,所以每年都要进行更新,暂时我做到的是2021年、2022年、2023年一月份的统计信息,大家后面可以根据自己的要求进行维护。暂时我先把这个数据贴出来大家看看哈,以便使用;
具体近三年节假日统计如下所示:

2、实现基准值前N天的计算(包括工作日、非工作日)
首先基于原有的数据进行一个遍历递推,将前N天的数据计算出来,存放到一个数组里面以便后用;

3、针对基准值的前N天数组进行非工作日的过滤
在这步的核心有两个,计算非工作日个数和修改前N天数组值为非工作日,都是采用递归函数实现的。

Part1、计算某个日期前有几个非工作日

输入一个日期,你得计算它是不是非工作日,如果是,它的前一个是否还是非工作日,做一个累加,也就是说这个日期及其前几天有几个非节假日,返回值为其前紧连非节假日个数。具体实现效果如下所示:


具体实现代码见第三部分-1.获取非工作日跨度
这个里面的holidayList就是第一步需要准备的数组变量,其目的就是为了获取跨度。

Part2:前N天转化成前N个工作日
此处主要是针对获取的非节假日个数后对原有数组的值进行调整,每次将最大的时间值抽取出来,然后只有发现最大的时间处于非节假日,则所有的其他时间段都要往前推,具体推得天数就是part1返回的Nums值。然后递归调用赋值即可;
具体代码见第三部分-2.最终转换

三、核心代码

1、获取非工作日跨度

function isIncludeHoliday(holidayList, dayStr, nums) {debugger;var newLnum = 0;for (var k = 0; k < holidayList.length; k++) {if (dayStr.indexOf(holidayList[k].dayStr) > -1) {dayStr = formatTime_scond(new Date(dayStr).getTime() - 24 * 60 * 60 * 1000, false);++newLnum;}}if (newLnum > 0) {return isIncludeHoliday(holidayList, dayStr, ++nums);} else {return nums;}}

2、最终转换核心源码

function resetArrListNew(returnArr, arrDayList, initNum) {debugger;if (returnArr.length == initNum) {return returnArr;} else {for (var k = 0; k < arrDayList.length; k++) {debugger;var numRang = isIncludeHoliday(holidayArrayList, arrDayList[k], 0);if (numRang > 0) {var newArrDay = [];var _dayStrArr = "";for (var l = 0; l < arrDayList.length; l++) {_dayStrArr = formatTime_scond(new Date(arrDayList[k]).getTime() - (numRang + l) * 24 * 60 * 60 * 1000, false);newArrDay.push(_dayStrArr);}var newchangeList = [];for (var j = 1; j < newArrDay.length; j++) {newchangeList.push(newArrDay[j]);}returnArr.push(newArrDay[k]);arrDayList = newchangeList;return resetArrListNew(returnArr, arrDayList, initNum);break;} else {var newchangeList = [];for (var j = 1; j < arrDayList.length; j++) {newchangeList.push(arrDayList[j]);}returnArr.push(arrDayList[k]);arrDayList = newchangeList;return resetArrListNew(returnArr, arrDayList, initNum);break;}}}}

四、Demo分享及彩蛋

分享

百度云
链接:https://pan.baidu.com/s/1dsMOVUfTaMcafFfLiyNioQ
提取码:hdd6
123云盘
https://www.123pan.com/s/ZxkUVv-xEJ4
提取码:hdd6

彩蛋

喜欢博主的文章的可以支持一下博主哟,支持博主的皆可上皇榜。
皇榜入口点击此处

【工作日推算】JS计算当前时间前N个工作日(去除周末及节假日,文尾附源码下载)相关推荐

  1. php图片动画源码,JavaScript_jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载),ImageDrawer.js是一款可以实现动 - phpStudy...

    jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载) ImageDrawer.js是一款可以实现动态绘制图片动画的jQuery插件.通过ImageDrawer.js插件,你可 ...

  2. python跑酷游戏源码_Phaser.js实现简单的跑酷游戏附源码下载

    采用的物理引擎是Phaser.js 在这里对此引擎不做过多介绍(因为我也是小白,嘿嘿) 效果展示: 源码(详细源码图片资源可点击文章下方或屏幕右上方的github链接进行clone) 1.创建游戏舞台 ...

  3. android 原生开发 3d地图 下载_arcgis api 3.x for js 入门开发系列二不同地图服务展示(附源码下载)...

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  4. arcgis开发 多版本之间如何兼容_arcgis api 4.x for js 结合 react 入门开发系列初探篇(附源码下载)...

    你还在使用 JQuery 或者 Dojo 框架开发 arcgis api 4.x for js 吗?想试试模块化开发吗?随着前端技术的发展,arcgis api 4.x for js 也有了结合 re ...

  5. arcgis xml 下载 切片_arcgis api 4.x for js地图加载arcgisserver本地离线瓦片(附源码下载)...

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 4.x for js:esri 官网 api,里面详细的介绍 arcgis api 4.x 各个类 ...

  6. 全球前十大一致性最好的交易系统之一Aberration(附源码)

    全球前十大一致性最好的交易系统Aberration,长线策略,主要用在日K线,周K线上. Aberration 交易系统由Keith   Fitschen 于 1986  年发明,1993  年Kei ...

  7. arcgis api 3.x for js 入门开发系列五地图态势标绘(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  8. springboot+vue.js+mysql+基于VUE框架的商城综合项目自动化系统的实现 毕业设计-附源码051018

    商城综合项目自动化系统 摘 要 目前电商系统商城项目管理极其频繁,迫切地需要自动化测试来代替人工繁琐而又重复的劳动.自动化测试相关的研究已经很多,但多数只是针对某一方面,比如单一接口或者单一页面或者性 ...

  9. arcgis api 3.x for js 入门开发系列二不同地图服务展示(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

最新文章

  1. JavaScript setTimeout() 介绍
  2. pmp考试用计算机,PMP是计算机类考试吗
  3. 【 MATLAB 】Fourier Analysis and Filtering frame(傅立叶分析和滤波 框架)
  4. SD卡格式化怎么恢复?只需要五个步骤
  5. var类型推断关键字
  6. python之解析最简单的xml
  7. 为Visual Studio 2010增加ExtJs智能提示
  8. WinForm控件开发总结(五)-----为控件的复杂属性提供类型转换器
  9. 【架构】大型网站优化技术思路
  10. ORACLE功能GREATEST功能说明具体实例
  11. Atitit 并发处理 go与 java对比较 目录 1. 并发编程的七个模型 线程,fp,actor,csp 数据级并行 Lambda 1 2. 四种并发编程模型简介 多线程,callback
  12. 史上最经典Java入门基础视频,没有之一!
  13. 数理统计: 第五章 方差分析与试验设计
  14. AVOD-代码理解系列(四)
  15. oss文件普通下载-断点下载
  16. 做华为外包一年的总结
  17. 谷歌、百度你更看好哪一个?
  18. 100+CAD常用机械零件图练习图限量获取
  19. 关于参加“兆易创新杯”第十三届中国研究生电子设计竞赛,国赛二等奖的总结(fishing_5)
  20. 什么是机器学习,为什么它如此重要?

热门文章

  1. api 微信内置浏览器js_微信开发-微信内置浏览器的Javascript API
  2. 我的Python——学习记录10.16
  3. 【转】shell 编程:冒号 后面跟 等号,加号,减号,问号的意义
  4. 在线SEO文章伪原创同义词交换工具PHP源码
  5. 如何 添加影像坐标系-删除影像坐标系
  6. 信息系统项目管理师第四版知识摘编:第1章 信息化发展
  7. 透过大数据剖析漫画何去何从
  8. 如何做好软件开发项目管理?
  9. 全球AI企业TOP20榜单
  10. iOS 从创建证书到发布