考勤系统之计算工作小时数
绝对原创,判断条件比较多,考虑到午休情况,喜欢的请拿走。。。
/// <summary> /// 计算今天有效工作小时数 /// </summary> 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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述