大家好,才是真的好。

很多人觉得,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语句即可。

不过今天我们就讲到这里吧。

更多精彩内容,请关注微信公众号:协作者

如何计算两个日期之间的工作天数相关推荐

  1. SQL计算两个日期之间的工作天数

    if exists (select * from dbo.sysobjects where id = object_id(N'[tb_Holiday]') and OBJECTPROPERTY(id, ...

  2. 【SQL开发实战技巧】系列(十七):数据仓库中时间类型操作(初级)确定两个日期之间的工作天数、计算—年中周内各日期出现次数、确定当前记录和下一条记录之间相差的天数

    系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...

  3. 如何计算两个日期之间相差的天数?

    见MSDN: 代码:确定两个日期之间的间隔   (Visual   C#) 本示例计算两个日期之间相差的天数并为该差额构造一个   TimeSpan   值. 示例 DateTime   oldDat ...

  4. java计算时间区间工作日_Java如何计算两个日期之间的工作日数?

    以下代码可帮助您查找两个日期之间指定的工作日(星期一,星期二,星期三等)的数量.我们下面使用的解决方案是在两个日期之间循环,并检查这些日期的工作日是否等于我们要计算的日期.package org.nh ...

  5. 如何计算两个日期之间相隔的天数?calendar的用法

    //首先定义一个calendar,必须使用getInstance()进行实例化 Calendar aCalendar=Calendar.getInstance(); //设置时间为 2004 年 8 ...

  6. 如何利用计算机计算天数,计算机如何计算两个日期之间的天数

    计算机是如何计算两个日期之间的天数的,这个问题看起来好像很简单,但是仔细一想,好像还没那么简单,月与月之间天数不一样,平年和闰年也会影响天数. 举个例子: 2017年2月1日-2017年6月1日中间有 ...

  7. 计算机数日期,计算机如何计算两个日期之间的天数

    计算机是如何计算两个日期之间的天数的,这个问题看起来好像很简单,但是仔细一想,好像还没那么简单,月与月之间天数不一样,平年和闰年也会影响天数. 举个例子: 2017年2月1日-2017年6月1日中间有 ...

  8. 计算时间差 html,javascript如何计算两个日期之间的天数差?

    javascript如何计算两个日期之间的天数差?下面本篇文章就来给大家介绍一下使用javascript计算两个日期之间的天数差,希望对大家有所帮助. 在javascript中计算两个日期之间的天数差 ...

  9. C#求两个日期之间相差的天数和当前日期+30天插入数据库

    求两个日期之间相差的天数 //数据库表的登录时间DateTime lastTime = dynamic.lastTime;//会员到期时间DateTime expireTime = dynamic.e ...

最新文章

  1. 命名实体识别学习笔记——使用Ltp
  2. 文件管理器_苹果超强文件管理器,秒变安卓?
  3. BERT小学生级上手教程,从原理到上手全有图示,还能直接在线运行
  4. (chap2 简单的Http协议) HTTP方法(2)其他方法
  5. 多线程断点续传下载软件-闪电下载2009
  6. SAP UI5 extension component loads standard component
  7. java生产者与消费者问题_java生产者与消费者问题
  8. Android Studio百度地图开发所需参数获取SHA1或MD5的最简单方法(图文教程)
  9. 前端学习(2672): vue3.0脚手架路由改变
  10. SpringCloud stream连接RabbitMQ收发信息
  11. 深圳增强互动科技_增强女性在科技领域的十项原则
  12. 用python将word文档导入数据库_python读取word文档,插入mysql数据库实例
  13. ue4 classuobject没有成员beginplay_UE4 C++ 智能滚动列表ScrollList
  14. 【日期工具类】DateUtils
  15. Java Date总结
  16. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 Tomb Raider
  17. php 上周日期,php获取本周和上周的开始日期和结束日期
  18. a推b等价于非a或b_手机系统将有A/B分区?Android 11这些变化你关注过吗
  19. 学好单片机好找工作吗?单片机学到什么程度可以找工作?
  20. unityplayerpre存档_c# unity PlayerPrefs 游戏存档,直白点就是讲游戏数据本地保存下来...

热门文章

  1. STM32 CAN总线故障检测功能的使用
  2. Boost(一)——Boost简介
  3. @ select 函数使用说明
  4. 天然气压缩因子计算软件_媒体看陕鼓陕鼓天然气长输管线压缩机组投运
  5. 利用cloudflare works搭建个人网盘站——免费免服务器搭建基于onedrive的网盘站(2021版)
  6. 小米5S_2015711_官方线刷包_救砖包_解账户锁
  7. 对比Excel两个sheet的数据是否相同
  8. 颜值高的游戏键盘—HyperX Alloy Origins 60 霓虹粉游戏机械键盘
  9. 某个个人公众号阅读量和点赞数分析
  10. xshell 7 免费版安装