using System; using System.Collections.Generic; using System.Text; namespace BBWY.Client.Helpers { public class PackTaskTimerHelper { /// /// 是否停止倒计时 /// /// /// public static bool IsStopTimer(DateTime dateTime) { var hour = dateTime.Hour; if (hour < 9 || hour >= 18 || (hour == 12)) return true; return false; } /// /// 计算有效超时时间 /// /// /// public static DateTime AccountEffectiveOverTime(DateTime overTime) { var userStartTime = overTime;//有效开始时间 if (overTime.Hour < 9) { userStartTime = overTime.Date.AddHours(9);//未到9店 按9点计时 } if (overTime.Hour >= 18)//从隔天9点开始计时 { userStartTime = overTime.Date.AddHours(18);//超过18点 按次日9点计时 } if (overTime.Hour == 12) { userStartTime = overTime.Date.AddHours(13);//中午未到13点 按13点计时 } if (userStartTime.DayOfWeek == DayOfWeek.Sunday) { userStartTime = userStartTime.Date.AddDays(1).AddHours(9);//周日算周1 9点开始 } return userStartTime; } /// /// 计算有效当前时间 /// /// 完成时间 /// public static DateTime AccountEffectiveNowTime(DateTime nowTime) { var userEndTime = nowTime;//有效开始时间 if (nowTime.Hour < 9) { userEndTime = nowTime.Date.AddDays(-1).AddHours(18);//未到9店 按前一天 18点完成 } if (nowTime.Hour >= 18) { userEndTime = nowTime.Date.AddHours(18);//超过18点 按18点完成 } if (nowTime.Hour == 12) { userEndTime = nowTime.Date.AddHours(12);//中午未到13点 按12点计时 } if (userEndTime.DayOfWeek == DayOfWeek.Sunday) { userEndTime = userEndTime.Date.AddDays(-1).AddHours(18);//周日算周六 18点完成 } return userEndTime; } /// /// 计算有效剩余时长 /// /// 开始时间 /// 完成时间 /// public static TimeSpan AccountEffectiveRemainDuration(DateTime nowTime, DateTime overTime) { var effectiveNowTime = AccountEffectiveNowTime(nowTime); var effectiveOverTime = AccountEffectiveOverTime(overTime); if (effectiveNowTime < effectiveOverTime) { return AccountEffectiveDuration(effectiveNowTime , effectiveOverTime); } return -AccountEffectiveDuration( effectiveOverTime, effectiveNowTime); } /// /// 计算有效时长(任务耗时) /// /// 开始时间 /// 完成时间 /// public static TimeSpan AccountEffectiveDuration(DateTime effectiveStartTime, DateTime effectiveCompletedTime) { var timespan = effectiveCompletedTime - effectiveStartTime; var hoursTimeSpan = timespan.Add(TimeSpan.FromDays(-CountSundays(effectiveStartTime, effectiveCompletedTime)));//计算小时差 //1. 开始时间 12点 结束时间 10点 if (effectiveStartTime.TimeOfDay > effectiveCompletedTime.TimeOfDay) { if (effectiveStartTime.Hour <= 12)//-16小时 return hoursTimeSpan.Add(TimeSpan.FromHours(-16)); else { if (effectiveCompletedTime.Hour <= 12) return hoursTimeSpan.Add(TimeSpan.FromHours(-15)); else return hoursTimeSpan.Add(TimeSpan.FromHours(-16)); } } else//2. 开始时间 10点 结束时间 11点/ 14点 { if (effectiveCompletedTime.Hour > 12) if (effectiveStartTime.Hour <= 12) return hoursTimeSpan.Add(TimeSpan.FromHours(-1)); return hoursTimeSpan; } } /// /// 判断两个日期之间有多少个星期日 /// /// /// /// private static int CountSundays(DateTime startDate, DateTime endDate) { int sundays = 0; while (startDate <= endDate) { if (startDate.DayOfWeek == DayOfWeek.Sunday) { sundays++; } startDate = startDate.AddDays(1); } return sundays; } } }