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;
}
}
}