使用Excel计算--任务完成总工作日时长
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
引言
计算任务完成时间周期,和计算金钱一样,是一个比较细致严谨的工作。
通常,我们可能以为,完成周期形如:
任务完成周期 = 任务结束时间 - 任务开始时间
但是一般情况下,对于正常社会企业,通常都是要把排除掉休息日,来计算的任务完成周期。
而要排除休息日就是一个比较复杂的事情了。
1. 识别工作日与休息日
首先节假日本身的规律性不是很强,每年都会不同,我们知道,节假日的计算要考虑几种情况
- 周末双休日;
- 因法定节假日调整的休息日(非周末);
- 因法定节假日调整的工作日(周末);
所以
一年中的休息日 = 周末双休日总和 + 因法定节假日调整的休息日(非周末) - 因法定节假日调整的工作日(周末)
一年中的工作日 = 一年的天数总数 - 一年中的休息日
Excel中工作日天数计算:
(注意计算粒度是天,相当于从任务开始日期的00:00:00,到任务结束日期的24:00:00)
([周末日]中填写的"0000000",代表周一到周日都不算休息日,统一在[节假日]中指定休息日)
([节假日]中列出所有的休息日,包括所有法定的休息日:周末休息日,非周末调整的节假日,但不包括调整为工作日的周末)
NETWORKDAYS.INTL(任务开始日期, 任务结束日期, “0000000”, [节假日])
Excel中休息日天数计算:
NETWORKDAYS.INTL(任务开始日期,任务结束日期,“0000000”) - NETWORKDAYS.INTL(任务开始日期, 任务结束日期, “0000000”, [节假日])
样例公式:
NETWORKDAYS.INTL(J3,K3,“0000000”)-NETWORKDAYS.INTL(J3,K3,“0000000”,O1:O19)
2. 计算任务完成的工作日时间段
下面就以“休息日”代指所有的法定的休息日;以“工作日”代指除“休息日”之外的法定工作日。
在许多项目中,主要要求计算的工作日时间,出现的场景可能有几种情况:
场景1. 开始在某个工作日,结束在某个工作日;
场景2. 开始在某个工作日,结束在某个休息日;
场景3. 开始在某个休息日,结束在某个工作日;
场景4. 开始在某个休息日,结束在某个休息日;
另外还有一些特殊场景:
场景5. 开始日与结束日在同一天时,该天是工作日;
场景6. 开始日与结束日在同一天时,该天是休息日;
注:任务开始时间、结束时间是带了时、分、秒
分别演算这些场景的计算公式情况,从而合理化的计算工作时间:
注:1天时间 = 24小时 = 1440分钟 = 86400秒
场景1:开始在某个工作日,结束在某个工作日
任务完成周期 = 任务结束时间 - 任务开始时间 - (任务周期中的休息日天数 * 1天时间)
场景2:开始在某个工作日,结束在某个休息日
任务完成周期 = 任务结束时间(格式化到24:00:00或23:59:59) - 任务开始时间 - (任务周期中的休息日天数 * 1天时间)
(调整方式:TEXT(任务结束时间,“yyyy/m/d 24:00:00”))
场景3. 开始在某个休息日,结束在某个工作日;
任务完成周期 = 任务结束时间- 任务开始时间(格式化到00:00:00) - (任务周期中的休息日天数 * 1天时间)
(调整方式:TEXT(任务开始时间,“yyyy/m/d 00:00:00”))
场景4. 开始在某个休息日,结束在某个休息日;
任务完成周期 = 任务结束时间(格式化到24:00:00或23:59:59) - 任务开始时间(格式化到00:00:00) - (任务周期中的休息日天数 * 1天时间)
场景5. 开始日与结束日在同一天时,该天是工作日;
任务完成周期 = 任务结束时间 - 任务开始时间
也适用场景1公式:
任务完成周期 = 任务结束时间 - 任务开始时间 - (任务周期中的休息日天数 * 1天时间)
场景6. 开始日与结束日在同一天时,该天是休息日;
任务完成周期 =0
也适用场景4公式:
任务完成周期 = 任务结束时间(格式化到24:00:00或23:59:59) - 任务开始时间(格式化到00:00:00) - (任务周期中的休息日天数 * 1天时间)
综合所有的场景之后,得出的综合公式如下:
- 如果任务结束时间是休息日,任务结束时间调整到24:00:00或23:59:59,工作日时保持不变;
- 如果任务开始时间是休息日,任务开始时间调整到00:00:00,工作日时保持不变;
- 任务完成周期 = 调整后任务结束时间 - 调整后任务开始时间 - (任务周期中的休息日天数 * 1天时间)
3. 计算公式
- 获取调整后时间:
判定是否是休息日,可以使用TEXT(时间,“yyyy/m/d”)格式化日期,之后在休息日列表中IFERROR(MATCH(日期,[休息日]),0)查找
开始时间调整方式:TEXT(任务开始时间,“yyyy/m/d 00:00:00”)
结束时间调整方式:TEXT(任务结束时间,“yyyy/m/d 24:00:00”)
EXCEL中使用IF语句来选取不同的值:IF (IFERROR( MATCH(TEXT(日期时间,“yyyy/m/d”),[休息日]) ,0), TEXT(日期时间,“yyyy/m/d 24:00:00”), 日期时间),获取到检查休息日调整后的时间
样例公式,
开始时间:IF(IFERROR(MATCH(TEXT(j3,“yyyy/m/d”),O1:O19,0),0),TEXT(j3,“yyyy/m/d 00:00:00”),j3)
结束时间: IF(IFERROR(MATCH(TEXT(k3,“yyyy/m/d”),O1:O19,0),0),TEXT(k3,“yyyy/m/d 24:00:00”),k3)
- Excel中休息日天数计算:
NETWORKDAYS.INTL(任务开始日期,任务结束日期,“0000000”) - NETWORKDAYS.INTL(任务开始日期, 任务结束日期, “0000000”, [节假日])
样例公式,
NETWORKDAYS.INTL(J3,K3,“0000000”)-NETWORKDAYS.INTL(J3,K3,“0000000”,O1:O19)
- 总的计算时间段样例公式(算出的x.x天) :
任务结束时间(格式化到24:00:00或23:59:59) - 任务开始时间(格式化到00:00:00) - 任务周期中的休息日天数
IF(IFERROR(MATCH(TEXT(K3,“yyyy/m/d”),O1:O19,0),0),TEXT(K3,“yyyy/m/d 24:00:00”),K3)
-IF(IFERROR(MATCH(TEXT(J3,“yyyy/m/d”),O1:O19,0),0),TEXT(J3,“yyyy/m/d 00:00:00”),J3)
-(NETWORKDAYS.INTL(J3,K3,“0000000”)-NETWORKDAYS.INTL(J3,K3,“0000000”,O1:O19))
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
相关文章:
使用Excel计算--任务完成总工作日时长
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 引言 计算任务完成时间周期,和计算金钱一样,是一个比较细致严谨的工作。 通常,我们可能以为,完成周期形如: 任务完成周期 任务结束时间 - 任务开始时间 但是…...

JavaWeb后端登录校验功能(JWT令牌技术,Cookie技术,Session,拦截技术,过滤器)
目录 一.登录校验功能(解决直接通过路径访问) 1.实现思路 二.会话技术 编辑 1.Cookie技术 2.Session 3.令牌技术 1.简介 2.如何生成和解析 3.令牌的使用 三.Filter过滤器 1.什么是过滤器 2.实现步骤: 3.过滤器执行流程 4.拦截路径 5.过…...
7-上传下载
上传下载 首先创建一张上传文件的表,例如: drop table if exists sys_file_info; create table sys_file_info (file_id int(11) not null auto_increment comment 文件id,file_name varchar(50) default …...

数字图像处理(实践篇)三十六 OpenCV-Python 使用ORB和BFmatcher对两个输入图像的关键点进行匹配实践
目录 一 涉及的函数 二 实践 ORB(Oriented FAST and Rotated BRIEF)是一种特征点检测和描述算法,它结合了FAST关键点检测和BRIEF描述子。ORB算法具有以下优势: ①实时性:能够在实时应用中进行快速的特征点检测和描述。 ②...

算法每日一题: 边权重均等查询 | 公共子祖先
大家好,我是星恒,今天给大家带来的是一道图里面有关公共子祖先的题目,理解起来简单,大家 题目:leetcode 2846 现有一棵由 n 个节点组成的无向树,节点按从 0 到 n - 1 编号。给你一个整数 n 和一个长度为 n …...
使用JavaScript和XLSX.js将数据导出为Excel文件
目录 一、安装XLSX.js二、将数据转换为Excel文件 导出数据是Web应用程序中常见的功能之一。在许多情况下,我们需要将数据导出为Excel文件,以便用户可以在本地计算机上查看和编辑数据。在本篇博客中,我们将介绍如何使用JavaScript和XLSX.js将数…...

如何使用YOLOv8训练自己的模型
本文介绍如何用YOLO8训练自己的模型,我们开门见山,直接步入正题。 前言:用yolo8在自己的数据集上训练模型首先需要配置好YOLO8的环境,如果不会配置YOLO8环境可以参考本人主页的另一篇文章 提醒:使用GPU训练会大幅度加…...
机器学习-逻辑回归【手撕】
逻辑回归 在模式识别问题中,所输出的结果是分类,比如是否是猫,这时候无法通过简单的线性回归来实现问题。同时,与线性回归不同的是,逻辑回归是一种名为回归的线性分类器,并常用于二分类,其本质…...

内网安全:NTLM-Relay
目录 NTLM认证过程以及攻击面 NTLM Relay攻击 NTLM攻击总结 实验环境说明 域横向移动:NTLM中继攻击 攻击条件 实战一:NTLM中继攻击-CS转发上线MSF 原理示意图 一. CS代理转发 二. MSF架设路由 三. 适用smb_relay模块进行中继攻击 域横向移动…...

Tensorflow2.0笔记 - tensor的padding和tile
本笔记记录tensor的填充和tile操作,对应tf.pad和tf.tile import tensorflow as tf import numpy as nptf.__version__#pad做填充 # tf.pad( tensor,paddings, modeCONSTANT,nameNone) #1维tensor填充 tensor tf.random.uniform([5], maxval10, dtypetf.int32) pri…...
多媒体测试资源
目录 简介自己整理的文件测试资源列表 简介 音视频测试时,需要许多源文件,这里整理了一些.会持续更新.当然可以使用ffmpeg转换获得需要的文件. 如果知道的这方面资源的,在评论区留言. 自己整理的文件 有视频,图片,音频. 链接:https://pan.baidu.com/s/1vatLmWk…...

Wordpress seo优化该怎么做?
Wordpress作为开源管理系统,目前已然是世界上最流行的cms之一,这不仅仅因为他开源,对用户友好,让任何人都能轻而易举的制作网站,更是因为这套程序对于搜索引擎非常友好,是做谷歌seo的不二之选 Wordpress作为…...

Ultraleap 3Di示例Interactable Objects组件分析
该示例代码位置如下: 分析如下: Hover Enabled:悬停功能,手放在这个模型上,会触发我们手放在这个模型上的悬停功能。此时当手靠近模型的时候,手的模型的颜色会发生改变,反之,则不会…...

Vue自定义成功弹窗H5实现类似于小程序的效果
效果图: <div class"father"><div class"success-box" v-if"isSuccess"><img src"../../assets/insure/success-logo.png" alt""><span>{{ successTitle }}</span></div> &…...
Linux之父:我们正在从C语言转向Rust
最近,Linus在“Torvalds 演讲:人工智能对编程的影响”:“我们正在从C语言转向Rust”。 网友讨论: Linus 选择 Rust 是因为,这是一个中长期解决方案,解决了 IT 世界中缺乏 C/C 人员的实际问题,所…...

C++ qt标题栏组件绘制
本博文源于笔者在学习C qt制作的标题栏组件,主要包含了,最小化,最大化,关闭。读者在看到这篇博文的时候,可以直接查看如何使用的,会使用了,然后进行复制粘贴源码部分即可。 问题来源 想要制作…...

Mysql运维篇(三) MySQL备份与恢复
一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。如有侵权,请留言,我及时删除! 一、物理备份与逻辑备份 1、物理备份:备份数据文件,转储数据库物理文件到某…...

数字图像处理(实践篇)二十七 Python-OpenCV 滑动条的使用
目录 1 涉及的函数 2 实践 1 涉及的函数 ⒈ setWindowProperty()用于设置GUI应用程序的属性 cv2.setWindowProperty(windowsName, prop_id, prop_value) 参数: ①...
拷贝构造函数的理解
1.拷贝构造函数与构造函数类似,当没有自定义拷贝构造函数的时候,编译器会定义一个拷贝构造函数。 当类对象没有初始化的时候,通过赋值运算符的形式,也是调用拷贝构造函数。 Test aa(100); Test bb aa;//调用拷贝构造函数Test …...

基于ncurse的floppy_bird小游戏
1. 需求分析 将运动分解为鸟的垂直运动和杆的左右运动。 2. 概要设计 2.1 鸟运动部分 2.2 杆的运动 3. 代码实现 #include <stdio.h> #include <ncurses.h>#include <stdlib.h> #include <time.h>int vx 0; int vy 1;int bird_r; int bird_c;int…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...