以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  想知道某一时段内不用上班的天数,求算法 (已解决)  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=44462)

--  作者:sloyy
--  发布时间:2013/12/31 22:40:00
--  想知道某一时段内不用上班的天数,求算法 (已解决)

图片点击可在新窗口打开查看此主题相关图片如下:搜狗截图20131231223615.png
图片点击可在新窗口打开查看

假设星期六 星期天不用上班的话,从2013-12-12 到2013-12-25 有4天不用上班,各位大侠有没有好的算法?
[此贴子已经被作者于2014-1-1 0:52:23编辑过]

--  作者:有点甜
--  发布时间:2013/12/31 23:11:00
--  
 如果是周六周日的话,应该有这样的规律。

 得到开始日期是星期几,7减去之得到下周一的天数n;结束日期减去开始日期得到的天数,天数减去n再除以 7,取整数,得到跨过多少周。

 整理一下,如果开始日期是周日,要加上3天;其他加上2天;

 再整理一下,如果结束日期是周六,要加上1天。

--  作者:sloyy
--  发布时间:2014/1/1 0:52:00
--  
Dim Sdate,Tdate As Date
Sdate="2013-12-12"
Tdate="2013-12-25"
Dim T As TimeSpan
Dim N,M As Integer
N=7-Sdate.DayOfWeek
T=(TDate-Sdate)
M=Math.Floor((T.Days-N)/7)*2
M=M+iif(Sdate.DayOfWeek=0,3,2)
M=M+iif(TDate.DayOfWeek=6,1,0)
Message.Show(M)


非常正确 ,有点甜 谢谢了
[此贴子已经被作者于2014-1-1 0:53:50编辑过]

--  作者:ztmdnzc
--  发布时间:2014/1/1 3:31:00
--  

Dim Sdate,Tdate As Date
Sdate="2013-12-12"
Tdate="2013-12-25"
Dim T As TimeSpan=TDate-Sdate
Dim d As Integer
For i As Integer=0 To t.TotalDays \'将时段t转换为天数

\'如果当天对应的周为0(星期日)或6(星期六)
If (sdate.AddDays(i)).DayOfWeek=0 OrElse (sdate.AddDays(i)).DayOfWeek=6 Then
d=d+1
End If
Next
Messagebox.Show(d)

 

注意:实际计算时还要考虑国家节假日的安排

 


--  作者:sloyy
--  发布时间:2014/1/1 11:26:00
--  
ztmdnzc 你这思路太棒了图片点击可在新窗口打开查看
--  作者:包头123
--  发布时间:2014/1/2 9:24:00
--  
要是能实现剔除国家法定节日就好了。
--  作者:大红袍
--  发布时间:2015/9/19 10:01:00
--  
以下是引用包头123在2014/1/2 9:24:00的发言:
要是能实现剔除国家法定节日就好了。

 

你做一个表把法定节日的日期提取出来,然后减去,或者判断是否相等不久好了?