当今财经

我们可以用,两个时间段中 较早的结束时间减去较晚的开始时间

简介: 我们可以用,两个时间段中 较早的结束时间减去较晚的开始时间,这样得到的正数的天数+1就是重复的天数。

最近在做一个功能,需要统计请假天数,按月统计。

而实际的请假数据就包括跨月的情况,所以就出现一个这样的问题。

大概有三种思路:一、常规思路以程序员的常规思维来看,计算两个时间段内的重复天数,分为多种情况。

每种情况又有细分,比如包含,如果是请假范围包含月份范围,则取月份范围。

如果月份范围包括请假范围,则直接取请假范围。

这样一看,逻辑思考上就较为复杂,写出来的代码阅读性就不高,容易出现纰露。

二、非常规思路再来看看非常规思路,第一种的缺点是逻辑较为复杂,容易出漏洞。

其实我们可以这样,将月份范围内的所有日期全部放到一个list中,然后遍历这个list,每个日期元素在另一个时间段内,则说明当前日期重复。

如果时间范围大了,用这种方式,岂不是循环越来越大,如果该方法用在循环统计中,就更加损耗性能。

三、进阶思路那有没有既便于理解,逻辑简单,又比较高性能的方案呢?

我们可以用,两个时间段中 较早的结束时间减去较晚的开始时间,这样得到的正数的天数+1就是重复的天数。

如果得到的天数小于0则说明两个时间段不重复。


以上是文章"

我们可以用,两个时间段中 较早的结束时间减去较晚的开始时间

"的内容,欢迎阅读当今财经的其它文章