如何计算两个日期之间的工作天数
大家好,才是真的好。
很多人觉得,Notes应用中的日期处理是一大需求点,也是一大难点,为此很多人使用Java代码来进行处理。但要是学会并灵活运用Domino中的公式,很多问题会变得很简单。今天我们就来讨论两个日期之间的工作日计算问题。
在考勤类应用中,如请假表单上我们创建三个字段,现在要计算开始日期、结束日期和这两段日期之间的工作天数。
我们创建一个计算按钮,写如下图公式:
公式的具体代码如下:
Check := @If(@IsTime(StartDate) & @IsTime(EndDate); 0; @Return(0));
S := @If(StartDate < EndDate; StartDate; EndDate);
E := @If(StartDate < EndDate; EndDate; StartDate);
DiffDays := @Integer((E - S) / 86400);
WeeksBetween := @Integer(DiffDays / 7);
WS := @Weekday(S);
WE := @Weekday(E);
Adjust := @If(WS = WE; 0; WS = 1 & WE = 7; 5; WS = 7 & WE = 1;0; WE = 7 | WE = 1; 6-WS; WS = 7 | WS = 1; WE-1;WE > WS; WE-WS; 5+WE-WS);
(WeeksBetween * 5) + Adjust
解释一下,该段公式是这样执行的:
首先我们使用Check := @If(@IsTime(StartDate) & @IsTime(EndDate); 0; @Return(0));语句来确认StartDate和EndDate是一个时间日期值,因为用户输入什么值都是有可能的;
其次使用语句S := @If(StartDate < EndDate; StartDate; EndDate);
E := @If(StartDate < EndDate; EndDate; StartDate);
判断EndDate要比StartDate晚,并将这两个变量分别赋值给E和S临时变量;
接着我们使用语句DiffDays := @Integer((E - S) / 86400);比较一下StartDate和EndDate之间有多少天,再用WeeksBetween := @Integer(DiffDays / 7)来计算StartDate和EndDate之间有多少周;
然后使用WS := @Weekday(S)和WE := @Weekday(E)语句来得到StartDate 和EndDate分别是星期几;
紧接着就是重要重要的语句
Adjust := @If(WS = WE; 0; WS = 1 & WE = 7; 5; WS = 7 & WE = 1;
0; WE = 7 | WE = 1; 6-WS; WS = 7 | WS = 1; WE-1;WE > WS; WE-WS; 5+WE-WS);
设置一个调整值Adjust;Adjust的值有很多种情况,比如StartDate 和EndDate的星期几是一样的,那么Adjust就是0;如果StartDate是周日(即 WS = 1 )而EndDate是周六(WE = 7),则StartDate 和EndDate之间间隔5天;以此类推……
最后就是StartDate 和EndDate 日期之间的真正的工作天数:(WeeksBetween * 5) + Adjust;即用两个日期之间的周数加上调整值Adjust即可。
你可以计算一下,如下图:
当然,这里面你可能发现了一个问题,这里的公式计算中,开始日期和结束日期不包含一个其中,例如开始日期是4月25号,结束日期是4月26号,那么只算1个工作日,如下图:
这是个数栅栏的问题,栅栏的杆子和格子数目肯定不一样,对吧?你要是觉得开始日期和结束日期都要算上,只需要修改一下Adjust语句即可。
不过今天我们就讲到这里吧。
更多精彩内容,请关注微信公众号:协作者
如何计算两个日期之间的工作天数相关推荐
- SQL计算两个日期之间的工作天数
if exists (select * from dbo.sysobjects where id = object_id(N'[tb_Holiday]') and OBJECTPROPERTY(id, ...
- 【SQL开发实战技巧】系列(十七):数据仓库中时间类型操作(初级)确定两个日期之间的工作天数、计算—年中周内各日期出现次数、确定当前记录和下一条记录之间相差的天数
系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...
- 如何计算两个日期之间相差的天数?
见MSDN: 代码:确定两个日期之间的间隔 (Visual C#) 本示例计算两个日期之间相差的天数并为该差额构造一个 TimeSpan 值. 示例 DateTime oldDat ...
- java计算时间区间工作日_Java如何计算两个日期之间的工作日数?
以下代码可帮助您查找两个日期之间指定的工作日(星期一,星期二,星期三等)的数量.我们下面使用的解决方案是在两个日期之间循环,并检查这些日期的工作日是否等于我们要计算的日期.package org.nh ...
- 如何计算两个日期之间相隔的天数?calendar的用法
//首先定义一个calendar,必须使用getInstance()进行实例化 Calendar aCalendar=Calendar.getInstance(); //设置时间为 2004 年 8 ...
- 如何利用计算机计算天数,计算机如何计算两个日期之间的天数
计算机是如何计算两个日期之间的天数的,这个问题看起来好像很简单,但是仔细一想,好像还没那么简单,月与月之间天数不一样,平年和闰年也会影响天数. 举个例子: 2017年2月1日-2017年6月1日中间有 ...
- 计算机数日期,计算机如何计算两个日期之间的天数
计算机是如何计算两个日期之间的天数的,这个问题看起来好像很简单,但是仔细一想,好像还没那么简单,月与月之间天数不一样,平年和闰年也会影响天数. 举个例子: 2017年2月1日-2017年6月1日中间有 ...
- 计算时间差 html,javascript如何计算两个日期之间的天数差?
javascript如何计算两个日期之间的天数差?下面本篇文章就来给大家介绍一下使用javascript计算两个日期之间的天数差,希望对大家有所帮助. 在javascript中计算两个日期之间的天数差 ...
- C#求两个日期之间相差的天数和当前日期+30天插入数据库
求两个日期之间相差的天数 //数据库表的登录时间DateTime lastTime = dynamic.lastTime;//会员到期时间DateTime expireTime = dynamic.e ...
最新文章
- 命名实体识别学习笔记——使用Ltp
- 文件管理器_苹果超强文件管理器,秒变安卓?
- BERT小学生级上手教程,从原理到上手全有图示,还能直接在线运行
- (chap2 简单的Http协议) HTTP方法(2)其他方法
- 多线程断点续传下载软件-闪电下载2009
- SAP UI5 extension component loads standard component
- java生产者与消费者问题_java生产者与消费者问题
- Android Studio百度地图开发所需参数获取SHA1或MD5的最简单方法(图文教程)
- 前端学习(2672): vue3.0脚手架路由改变
- SpringCloud stream连接RabbitMQ收发信息
- 深圳增强互动科技_增强女性在科技领域的十项原则
- 用python将word文档导入数据库_python读取word文档,插入mysql数据库实例
- ue4 classuobject没有成员beginplay_UE4 C++ 智能滚动列表ScrollList
- 【日期工具类】DateUtils
- Java Date总结
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 Tomb Raider
- php 上周日期,php获取本周和上周的开始日期和结束日期
- a推b等价于非a或b_手机系统将有A/B分区?Android 11这些变化你关注过吗
- 学好单片机好找工作吗?单片机学到什么程度可以找工作?
- unityplayerpre存档_c# unity PlayerPrefs 游戏存档,直白点就是讲游戏数据本地保存下来...
热门文章
- STM32 CAN总线故障检测功能的使用
- Boost(一)——Boost简介
- @ select 函数使用说明
- 天然气压缩因子计算软件_媒体看陕鼓陕鼓天然气长输管线压缩机组投运
- 利用cloudflare works搭建个人网盘站——免费免服务器搭建基于onedrive的网盘站(2021版)
- 小米5S_2015711_官方线刷包_救砖包_解账户锁
- 对比Excel两个sheet的数据是否相同
- 颜值高的游戏键盘—HyperX Alloy Origins 60 霓虹粉游戏机械键盘
- 某个个人公众号阅读量和点赞数分析
- xshell 7 免费版安装