关于两个日期时间计算,去除工作日节假日

zhuzhuifeng 2018-07-30 04:09:46
现在有这样一个需求,给定一个开始时间(包含年月日时分秒),给定一个结束时间(包含年月日时分秒),要求计算和判断这2个时间之差是否小于等于24小时(或86400秒),其中,这2个时间之间的周末,节假日都要去掉。简单举例:周一10点至周二9点为24小时内,周一10点至周二11点为24小时外;周五10点至下周一9点为24小时内,周五10点至下周一11点为24小时外;节假日同理。
请求大师们帮忙想想办法这个应该怎么做。。
...全文
1091 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2018-07-30
  • 打赏
  • 举报
回复
怎么是我不走心呢?
统计工作日数量不外是:
1、遍历时间段,统计出工作日的个数
2、遍历非工作日,从时间段天数中扣除非工作日天数
如果两个方案都不能令你满意的话,真不知道你打算要干什么了
  • 打赏
  • 举报
回复
除非你设定所有日期是否工作日的表,否则还是我那篇链接约定1~5为工作日,6~7为非工作日,所有设定的特殊日期就是对前面的判断结果取反(即是工作日的,取反后就是非工作日)

毕竟工作日和非工作日的划分不是固定的
FainSheeg 2018-07-30
  • 打赏
  • 举报
回复
给你我自己写的计算工作日数的函数,你参考一下,只是完成 了功能,没去考虑效率优化什么的:
我的节假日表结构很简单:ID,DATE,TYPE,Date就是日期,Type是bit值,1表示节假日,0表示调休(因为放假导致的,原本的周末要上班),表添加数据的时候有一个原则,本身处于周末的节假日不重复添加。
函数如下:

USE [PrintedRecords]
GO
/****** Object: UserDefinedFunction [dbo].[Workdays] Script Date: 07/30/2018 16:47:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER function [dbo].[Workdays](@date1 date,@date2 date) returns int
as
begin
declare @d date
declare @i int
set @i=0
set @d=@date1
while @d<=@date2
begin
set @i=@i+(select case
when (datepart(weekday,@d) in(1,7) and @d not in(select [date] from holidays where [type]=0)) or @d in(select [date] from holidays where [type]=1)
then 0 else 1
end)
set @d=dateadd(dd,1,@d)
end
return(@i)
end
zhuzhuifeng 2018-07-30
  • 打赏
  • 举报
回复
引用 3 楼 starfd 的回复:
https://blog.csdn.net/starfd/article/details/44022381
参考下非工作日设定

其实如1楼所说,应该是要建一张非工作日表,或者叫节假日表,那么就是关键在于日期的处理上。。。
zhuzhuifeng 2018-07-30
  • 打赏
  • 举报
回复
引用 4 楼 xuzuning 的回复:
https://www.baidu.com/s?wd=C%23%E5%B7%A5%E4%BD%9C%E6%97%A5&ie=UTF-8

老大不走心啊。。百度能搜索的我也都看了。。
  • 打赏
  • 举报
回复
zhuzhuifeng 2018-07-30
  • 打赏
  • 举报
回复
引用 1 楼 yenange 的回复:
你在数据库中添加:
1. 工作时间表 workRange
2. 节假日表 holidayRange
定义好这两个表, 后面只是一个查询 sql 的操作, 问题就简化了


工作日表与节假日表,是否一张就够了,那么,一个查询sql的操作,这句查询是关键了吧?
吉普赛的歌 2018-07-30
  • 打赏
  • 举报
回复
你在数据库中添加:
1. 工作时间表 workRange
2. 节假日表 holidayRange
定义好这两个表, 后面只是一个查询 sql 的操作, 问题就简化了

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧