关于计算加班调休时间的问题

问题描述

最近对一个老项目提升改造,碰到个计算加班调休的事:1.普通加班,调休期限加班结束后一个月内,如果是2014-11-0720:00加班2小时到22:00,那可以在12-07前调休任意时间调休2小时。2.紧急项目赶工加班,调休期限为赶工结束后三个月内,比如2014-05-01加班了8个小时,赶工结束时间为6-1,那这8个小时可以在5-1到9-1号任意时间内调休8小时。3.该年度内所有的加班,如果超限未调休的,可以最多保留2天就是16个小时到年底前任意使用,也就是说你5-1普通加班了8小时,但6-1前没调休,那你可以在6-2到年底任意时间调休8小时,如果5-15-25-3普通加班了24小时,没有调休过,那6-4到年底任意时间可调休16小时。超限调休一年最多16小时。以前运行了多年的系统就是个记录数据,加班和调休没关联,现在要在每次调休时计算可用的调休小时数。如果是新项目,那实现起来很简单,每条加班记录加一个已使用时长的字段,每次调休可以遍历前面的加班,修改该字段值,后续的计算就会很方便,但现在肯定不适用,已经有好几年的数据了。下面是我的思路,但在实现上有问题:如果我要11-58:00~17:00调休8个小时。第一步,计算11-5前符合期限内的加班数,这个比较容易实现,11-5在加班结束时间~期限截止时间内所有的加班时长合计。第二步,计算这段时间内的调休时长。第三步,计算今年超限未使用过的加班时长,超过16小时,统一变成16小时,不足16小时,取实际值。第四步,计算今年已经使用过的超限调休时长。第二步开始就有疑问了,该段时间如何定义,如果是第一步里的最早结束时间到最晚截止时间范围内所有的调休,比如最早结束时间是7-1(7-1是个赶工的加班,赶工结束是9-1,那截止日期是12-1),最晚的截止时间是12-3(11-3有个普通加班)。也就是7-1到12-3之间的所有调休合计,问题来了,如果7-5有个普通加班,在8-5前已经调休了,第二步会统计进调休,但第一步不会统计其加班。这个时间段该如何来定义?第三步,遍历本年度所有的加班和调休记录,调休在可使用的期限内的加班就不纳入合计,这里逻辑也貌似有点问题。第四步,遍历11-5前本年度所有的调休,调休开始时间不在任意一条加班结束时间到截止时间内的所有调休合计。如果四步都实现了应该可以计算出来,但二三两步都有疑问。各位是否有好的逻辑可以比较方便的计算出来,脑子都搞混了。

解决方案

解决方案二:
方法就是多定义一个字段,至于既有数据,可以用人工或者程序的办法一次性导入,规则问甲方。
解决方案三:
明显是设计一个一对多关系的数据表2个字段表示一个是记录调休的一个是记录加班的之后就是读数据进行判断即是
解决方案四:
引用1楼caozhy的回复:

方法就是多定义一个字段,至于既有数据,可以用人工或者程序的办法一次性导入,规则问甲方。

规则就是前面3点啊
解决方案五:
引用2楼xianfajushi的回复:

明显是设计一个一对多关系的数据表2个字段表示一个是记录调休的一个是记录加班的之后就是读数据进行判断即是

设计类似的表也是基于新数据的基础上,现在我的问题更多的是如何对老数据进行整理,判断某人现在剩余几天可正常调休,几天可超限调休。
解决方案六:
那就看你自己的思路了,原来数据是什么样的,现在的表又是怎么设计的,才知道怎么整理.
解决方案七:
我昨天请人FB花了3k,结账时人家给了一个优惠卡,在下个月几号到几号过来消费能打8折,同时还能抵扣380的酒水ok,其实你的系统就和我上面说的基本是一模一样的抽象逻辑。所以别搞复杂了,只要达到规则“发张卡”,下次消费滴时候查询有卡没有(并且判定这个卡是什么规则,过期没有就ok了)至于旧数据可以不管(新规则运行,那里管的了旧数据,而且那些卡是已经消费了,还是继续存着这个谁知道?)ps:建议别搞一个字段,而是搞一个发卡表。一个字段加来减去麻烦,而且容易错,错了还不知道怎么错滴
解决方案八:
引用6楼wanghui0380的回复:

我昨天请人FB花了3k,结账时人家给了一个优惠卡,在下个月几号到几号过来消费能打8折,同时还能抵扣380的酒水ok,其实你的系统就和我上面说的基本是一模一样的抽象逻辑。所以别搞复杂了,只要达到规则“发张卡”,下次消费滴时候查询有卡没有(并且判定这个卡是什么规则,过期没有就ok了)至于旧数据可以不管(新规则运行,那里管的了旧数据,而且那些卡是已经消费了,还是继续存着这个谁知道?)ps:建议别搞一个字段,而是搞一个发卡表。一个字段加来减去麻烦,而且容易错,错了还不知道怎么错滴

旧数据怎么可能不管,以前的可以不管,今年的不能不管啊,人家一年加班下来,平时偶尔用用,攒到年前能用的肯定是有个几天的,我现在要做的就是要把今年已经用掉的调休剔除掉,剩余还有多少天调休可以用。

时间: 2024-09-12 13:56:35

关于计算加班调休时间的问题的相关文章

本函数计算两个时间的差[原创]

函数|原创 '******************************'||Function TimeDiff(sBegin, sEnd)'||本函数计算两个时间的差,可以不用更改直接使用'||作者:machinecat 2001/10/26'****************************** '******************************'注:首先需要判断用户输入的sBegin与sEnd之间的大小'可以通过DataDiff函数获得两者之间的时间差,不需要进行复杂的

本函数计算两个时间的差

函数 '******************************'||Function TimeDiff(sBegin, sEnd)'||本函数计算两个时间的差,可以不用更改直接使用'||作者:machinecat 2001/10/26'****************************** '****************************** '注:首先需要判断用户输入的sBegin与sEnd之间的大小 '可以通过DataDiff函数获得两者之间的时间差,不需要进行复杂的时

go语言计算两个时间的时间差方法_python

本文实例讲述了go语言计算两个时间的时间差方法.分享给大家供大家参考.具体分析如下: go语言计算两个时间的时间差,代码很简单,返回1天前.1周前还是1月前的时间 package main import ( "fmt" "time" ) func main() { //Add方法和Sub方法是相反的,获取t0和t1的时间距离d是使用Sub //将t0加d获取t1就是使用Add方法 k := time.Now() //一天之前 d, _ := time.ParseDu

php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码_php实例

php计算两个时间相差的天数.小时数.分钟数.秒数 PHP中计算两个时间相差的天数.小时数.分钟数.秒数不如其它语言方便,但搞清了PHP中时间的表示方法后也很简单.本文章向大家讲解php如何计算时间相差.需要的码农可以参考一下. 先看下面这个网上给的例子:  //$startdate是开始时间,$enddate是结束时间 <?php $startdate="2011-3-15 11:50:00"; $enddate="2012-12-12 12:12:12";

java计算两个时间相差天数的方法汇总_java

问题描述: 输入:两个日期 输出:两个日期相差的天数 具体代码实现 方法1: 通过Calendar类的日期比较.注意:这里需要考虑一下: 日期是跨年份的,如一个是2012年,一个是2015年的 年份是分闰年和平年的,各自的天数不同 /** * date2比date1多的天数 * @param date1 * @param date2 * @return */ public static int differentDays(Date date1,Date date2) { Calendar cal

PHP计算两个时间的差(秒 分 时 天 月 年)

  两个时间之间月份差实例代码:  代码如下   $yourdate="2012-10-20"; $yourdate_unix=strtotime($yourdate); echo (date("Y",$yourdate_unix)-date("Y"))*12+(date("m",$yourdate_unix)-date("m")); 例子1  代码如下   /*     * 计算2个时间段的月份差  *

帮你计算日常活动时间:BeginIt

据国外媒体报道,对于大多数人而言,都没有日常活动时间计算的意识和习惯.事实上,如果是一个正常作息工作的人,大部分都是朝八晚五(或者是更晚),中午有一顿例行午餐时间.然而,当被问及日常生活时,大多数人都会告知自己每日做了哪些事情,但是却不能描述每件事情花了多次时间(至少是不能说出精确的时间长度).你可能会反驳,"谁在乎花了多长时间呢?"的确,时间追踪并不是人们看重或者感兴趣的事情,似乎也没有什么实用性,但是,近日推出的一款新型应用BeginIt 能够改变你对此的看法. 启动应用 开启Be

js计算两个时间之间天数差的实例代码_javascript技巧

复制代码 代码如下: //判断是否为闰年function isLeapYear(year){if(year % 4 == 0 && ((year % 100 != 0) || (year % 400 == 0))){     return true;}return false;}//判断前后两个日期function validatePeriod(fyear,fmonth,fday,byear,bmonth,bday){if(fyear < byear){return true;}el

c# 咨询关于计算预计提货时间的思路

问题描述 我想咨询一个预计提货时间的计算思路比如现在是201412-1114:30星期四,以工作工作时间8小时为一天,27小时后,具体时间是多少,,8:30-17:308小时算一天,到最后一天时间超过17:30的小时,要加到第二天从8:30开始算碰到周末双休加2天,节假日在顺延,我是想用时间除以8,剩下小数部分*8加上时间,超过17:30在加1,剩余小时再和8:30相加得到一个时间,判断遇到周末次数+2在算,遇到特殊节假日+几天,觉得非常麻烦各位大大,有没有可简化的办法?不甚感激 解决方案 解决