日期:2014-05-17  浏览次数:20933 次

求一个思路或算法
如有以下些请假时间段(每天工作时间上午从08:00-12:00;下午 14:00 - 18:00)

一)、员工A请假时间 从 2013-08-13 08:00 至 2013-08-15 12:00 共请假 2.5天

二)、员工B请假时间 从 2013-08-19 14:00 至 2013-08-22 12:00 共请假 3 天 

三)、员工C请假时间 从 2013-08-17 14:00 至 2013-08-18 12:00 共请假 1 天 

四)、员工D请假时间 从 2013-08-17 08:00 至 2013-08-17 18:00 共请假 1 天 

五)、员工E请假时间 从 2013-08-26 08:00 至 2013-08-26 12:00 共请假 0.5 天

现在怎么样去判断,这些请假时间段中,是以那一天是上午或下午开始或结束请假的

那么现在就想要得到

员工A请假时间到 2013-08-15 12:00 就结束了,他 2013-08-15 下午是要打卡上班的

员工B请假时间是从 2013-08-19 14:00  开始,那么得出他,2013-08-19 上午还是要打卡的
               到 2013-08-22 12:00  就结束了,那么他 2013-08-22 下午是要打卡上班的

员工C的请假时间,虽然只请了1天,但是跨了两天,其开始请假与结束请假的上午和下午都是还要打卡的,

员工D的请假时间刚好一整天,没有跨度,是不需要打卡的,

员工E只请了上半天,他下午上班时间段还是要打卡的


问题就是怎么样找出这种请假段中时间包含半天的这种日期,现在我实现的方法不是很理想,看看各位有什么思路

------解决方案--------------------
就是判断上午下午打卡的时间是否落在假期内嘛。

你的问题是什么。
------解决方案--------------------
很简单啊,起始日14点的, 和结束日12点的,就是半天了,要打卡
------解决方案--------------------
请假是连续的么?
如果是连续的,就判断下起始时间的小时 >12:00 上午要打卡 否则不要
                      结束时间的小时 <14:00 下午要打卡 否则不要

如果是不连续的,拆分成几个连续的时间区间
------解决方案--------------------
引用:
Quote: 引用:

很简单啊,起始日14点的, 和结束日12点的,就是半天了,要打卡


这样也是一种思路,
还有这个上下班时间也不一定是就是 08:00 到 12:00 和 14:00 到 18:00 

也有可能是 08:00 到 11:30  和 13:00 到 17:30 
这个上下班时间是根据用户配置来的,

判断起始日不是上班时间即可, 例如起始时间 〉10:00
同理 判断结束日不是下班时间 : < 17:00