计算两个日期之间的工作日数,获取指定日期为

日期:2019-10-05编辑作者:计算机网络

转自:http://www.maomao365.com/?p=6771

/**//**//**//// <summary>
/// 总括多少个日子之间的办事日数,(星期6,星期日,不算工作日)dt1和dt2之间相隔有一点点专门的工作日,在那之中dt3-dt4的年三星(Samsung)公共休假期,这里公共休假日可以用来个数组,或然从一个xml表里面读取,以便扣除
/// </summary>
/// <param name="dt1">要计算的开局时间</param>
/// <param name="dt2">要总括的完工作时间间</param>
/// <param name="dt3">公休开头时间</param>
/// <param name="dt4">公休停止时间</param>
/// <returns>intReturn</returns>
private int DifferDate(DateTime dt1,DateTime dt2,DateTime dt3,DateTime dt4)
{
int intReturn=0;//重返值,即dt2和dt1之间的做事日数

摘要:

System.TimeSpan tsDiffer=dt2.Date-dt1.Date;//总括dt2和dt1之间离开多少天
int intDiffer=tsDiffer.Days;//相差天数的int值
for(int i=0;i<intDiffer;i++)//从dt1早先一每一日加,决断不常的日期值是否周天或星期六,要是既不是星期日,亦非周天,並且也不在dt3和dt4之间,则该天为工作日,intReturn加1
{
    DateTime dtTemp=dt1.Date.AddDays(i);
    if((dtTemp.DayOfWeek!=System.DayOfWeek.Sunday) && (dtTemp.DayOfWeek!=System.DayOfWeek.Saturday))
    {
        if((dtTemp.Date<dt3.Date) || (dtTemp.Date>dt4.Date))
        {
            intReturn++;
        }
    }
   
}
return intReturn;

下文汇报工作中,须求获得钦定日期在前一个月的职业日

}


下文陈说常规的钦命工作日所在月的大运深入分析,
兑现思路:
1 生成三个国家法定假日表(A),非星期天,星期六
2 生成二个国家法定补办表(B),涉及礼拜六星期日调班
3 生成钦点月份的日子流水表(C)
4 获取钦命日期的专门的学问日音讯,如下所示:

--例: 获取 2018-4-10 为2018年4月的第几个工作日
declare @d datetime
set @d ='2018-4-10' --可通过下面的方法计算出 为本月第6个工作日

---1:获取4月指定日期的所在月工作日数
create table A(A datetime)
create table B(B datetime)
----4.5.4.6 4.7 4.30为法定假日
insert into A (A)values('2018-4-5'),
('2018-4-6'),('2018-4-7'),('2018-4-30')
----补班日 4月8 4月28 4月30 日
insert into B (B)values('2018-4-8'),
('2018-4-28'),('2018-4-30')

---生成指定月份(4月)所有天数流水
set datefirst 1 --设置星期一为第一个工作日

select * from 
(

select row_number() over(order by d asc ) as [本月第*个工作日],d,datepart(w,d) as [weekInfo] from (
select dateadd(day,number,'2018-4-1') as d from master..spt_values 
where type='p' 
and number >=0 
and dateadd(day,number,'2018-4-1') between '2018-4-1' and dateadd(day,-1,'2018-5-1')
) as a 
where a.d not in (select A from A)
and (a.d in (select b from B ) 
or datepart(w,a.d) not in (6,7) 
)
) as extend 
where d =@d 

go
drop table A 
drop table B

图片 1

本文由今晚最快开奖现场直播发布于计算机网络,转载请注明出处:计算两个日期之间的工作日数,获取指定日期为

关键词:

时间戳转换为日期

DATEADD(s, Timestamp + 8*3600, '1970-01-01 00:00:00') 在那之中Timestamp为十个人的时日戳,+8*3600是猎取中华夏族民共和国新加坡时...

详细>>

查看Computer依然服务器sqlserver端口命令

exec sys.sp_readerrorlog 0, 1, 'listening'  ...

详细>>

常用语法,SE卡宴VESportage常用语法汇总

阅读目录 一、SQL分类 DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—...

详细>>

剧中人物与权力,分配数据库剧中人物权限

1.在SQL Server中,顾客和剧中人物是分为服务器品级和数据库级其余 sql server二〇〇六安全管理之顾客、角色、架构 与...

详细>>