博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
考勤系统之计算工作小时数
阅读量:4325 次
发布时间:2019-06-06

本文共 2778 字,大约阅读时间需要 9 分钟。

///         /// 计算今天有效工作小时数        ///         public static Decimal GetWorkHour(CheckOnModel todayCheckOn)        {            //计算今天有效工作小时数            //正常情况上下班 早上早与9:00 下班晚于18:00            DateTime amTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " 09:01");            DateTime pmTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " 18:00");            DateTime noonBreakStartTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " 12:30");            DateTime noonBreakEndTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " 13:30");            CheckOnModel copyCheckOn = CheckOnModel.DeepCopy(todayCheckOn);            //扣除一个小时午休            bool subtractOneHour = true;            //早于9:05分上班 上班打卡时间从9点起算            if (todayCheckOn.OnDutyTime.Value <= amTime)            {                copyCheckOn.OnDutyTime = amTime.AddMinutes(-1);            }            //在午休时间上班 从午休结束时开始算            if (todayCheckOn.OnDutyTime.Value >= noonBreakStartTime && todayCheckOn.OnDutyTime.Value <= noonBreakEndTime)            {                copyCheckOn.OnDutyTime = noonBreakEndTime;                subtractOneHour = false;//不再扣除午休时间            }            //从午休结束后开始上班            if (todayCheckOn.OnDutyTime.Value >= noonBreakEndTime)            {                subtractOneHour = false;//不再扣除午休时间            }            //下班打卡时间从18点起算            if (todayCheckOn.OffDutyTime.Value >= pmTime)            {                copyCheckOn.OffDutyTime = pmTime;            }            //下班时间介于午休时间            if (copyCheckOn.OffDutyTime.Value >= noonBreakStartTime && copyCheckOn.OffDutyTime.Value < noonBreakEndTime)            {                copyCheckOn.OffDutyTime = noonBreakStartTime;                subtractOneHour = false;//不再扣除午休时间            }            //下班时间早于午休时间            if (copyCheckOn.OffDutyTime.Value < noonBreakStartTime)            {                subtractOneHour = false;//不再扣除午休时间            }            if (subtractOneHour)            {                copyCheckOn.WorkHour = Convert.ToDecimal((copyCheckOn.OffDutyTime.Value - copyCheckOn.OnDutyTime.Value).TotalHours - 1);            }            else            {                copyCheckOn.WorkHour = Convert.ToDecimal((copyCheckOn.OffDutyTime.Value - copyCheckOn.OnDutyTime.Value).TotalHours);            }            //午休时间打卡走人的,可能为负数            if (copyCheckOn.WorkHour < 0)            {                copyCheckOn.WorkHour = 0;            }            //补签成功的 视为正常打卡 但要减去扣除小时数            if (copyCheckOn.Status == "Y" && copyCheckOn.EditMan != new Guid())            {                copyCheckOn.WorkHour = 8 - copyCheckOn.SubtractHour;            }            return copyCheckOn.WorkHour;        }

 

转载于:https://www.cnblogs.com/dongh/p/6603887.html

你可能感兴趣的文章
欧建新之死
查看>>
自定义滚动条
查看>>
APP开发手记01(app与web的困惑)
查看>>
笛卡尔遗传规划Cartesian Genetic Programming (CGP)简单理解(1)
查看>>
mysql 日期时间运算函数(转)
查看>>
初识前端作业1
查看>>
ffmpeg格式转换命令
查看>>
万方数据知识平台 TFHpple +Xpath解析
查看>>
Hive实现oracle的Minus函数
查看>>
秒杀多线程第四篇 一个经典的多线程同步问题
查看>>
RocketMQ配置
查看>>
vs code调试console程序报错--preLaunchTask“build”
查看>>
蚂蚁金服井贤栋:用技术联手金融机构,形成服务小微的生态合力
查看>>
端口号大全
查看>>
机器学习基石笔记2——在何时可以使用机器学习(2)
查看>>
POJ 3740 Easy Finding (DLX模板)
查看>>
MySQL 处理重复数据
查看>>
关于typedef的用法总结(转)
查看>>
【strtok()】——分割字符串
查看>>
Linux下安装rabbitmq
查看>>