javascript实现找出一个月内的工作日,并格式化打印(不考虑法定节假日)

本文主要是介绍javascript实现找出一个月内的工作日,并格式化打印(不考虑法定节假日),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

找出一个月内的工作日

  • 一、需求
  • 二、代码与分析
      • 1.将特定的时间字符串转化为Date类型的时间
      • 2.格式化时间戳
      • 3.打印输出某段时间内的所有工作日
      • 4.测试执行
  • 三、最终效果展示

一、需求

由于公司的工时填报系统需要填写一个月的工作内容,特写出这个脚本来找出某月的工作日,但是姑且不考虑特殊法定节假日的情况。当然该函数并不限定必须是一个月,一段时间的也可以。

二、代码与分析

需要用到JavaScript中的Date类型中的getDay方法来判断某一天是否为周六日,如果getDay为0则为周日,为6则为周六。以下为几个重要的实现函数:

1.将特定的时间字符串转化为Date类型的时间

function stringToDate(dateString) {dateString = dateString.split('-');return new Date(dateString[0], dateString[1] - 1, dateString[2]);
}

2.格式化时间戳

// 格式化为 2022-10-01
function formatDate(date) {let year = date.getFullYear();let month = date.getMonth() + 1;// 月份小于10,前面补0if(month < 10) {month = '0' + month;}let day = date.getDate();// 天数小于10,前面补0if(day < 10) {day = '0' + day;}return `${year}-${month}-${day}`;
}

3.打印输出某段时间内的所有工作日

function printWorkDay(dateBegin, dateEnd) {dateBegin = stringToDate(dateBegin);dateEnd = stringToDate(dateEnd);totalTime = (dateEnd - dateBegin) / (24 * 3600 * 1000) + 1; // 总天数let workDays = [];for(let i = 0; i < totalTime; i++) {if(dateBegin.getDay() !== 0 && dateBegin.getDay() !== 6) {workDays.push(formatDate(dateBegin));}dateBegin = dateBegin.valueOf()dateBegin += 24 * 3600 * 1000; // 加一天dateBegin = new Date(dateBegin);}return workDays;
}

4.测试执行


let workDaysForLoop = printWorkDay('2022-10-01', '2022-10-31'); // workDaysForLoop用于循环提交工作日志,如果遇当月有特殊法定节假日需手动处理特殊日期
// 测试用函数
const test = function (days) {let ConfigInfo = {authorization: '', //tokendate: days, // 日期workContent: '产品需求开发', // 工作内容}let body = `{"category1":"Other","category2":"其它","projectId":"79e48b87-df9f-4080-bf60-bd1c094b8e3e","date":${ConfigInfo.date},"normalHours":"8","overtimeHours":"","workContent":${ConfigInfo.workContent},"costBearingDepartmentId":"ea462f59-602d-4af4-9931-2c55623b6996","timesheetType":"研发","functionType":"通用功能","associatedSaleProjectId":"b5edb2a6-918d-48d8-8b0b-4668bf5d2b6a","costBearingProductLine":null}`;console.log(body)
}// 一次性提交
let timeID
const sleep = (time) => new Promise((resolve) => {timeID = setTimeout(resolve, time);
});(() => {workDaysForLoop.forEach(async (item, index) => {await sleep(1000 * index)test(item); // 此处处理提交逻辑})
})();clearTimeout(timeID)

三、最终效果展示

在这里插入图片描述
在这里插入图片描述

这篇关于javascript实现找出一个月内的工作日,并格式化打印(不考虑法定节假日)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/251716

相关文章

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

基于Python实现PDF动画翻页效果的阅读器

《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

Springboot使用RabbitMQ实现关闭超时订单(示例详解)

《Springboot使用RabbitMQ实现关闭超时订单(示例详解)》介绍了如何在SpringBoot项目中使用RabbitMQ实现订单的延时处理和超时关闭,通过配置RabbitMQ的交换机、队列和... 目录1.maven中引入rabbitmq的依赖:2.application.yml中进行rabbit