以文本方式查看主题
- Foxtable(狐表) (http://foxtable.net/bbs/index.asp)
-- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2)
---- 想知道某一时段内不用上班的天数,求算法 (已解决) (http://foxtable.net/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的发言: 要是能实现剔除国家法定节日就好了。
你做一个表把法定节日的日期提取出来,然后减去,或者判断是否相等不久好了?
|