Foxtable(狐表)用户栏目专家坐堂 → [求助]计算两个日期列的工作日(已解决)


  共有9397人关注过本帖树形打印复制链接

主题:[求助]计算两个日期列的工作日(已解决)

帅哥哟,离线,有人找我吗?
石四
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:972 积分:7048 威望:0 精华:0 注册:2013/3/31 10:33:00
  发帖心情 Post By:2014/12/3 16:55:00 [显示全部帖子]

Dim Lb1 As WinForm.DateTimePicker
Lb1 = e.Form.Controls("日期")

Dim n,n1 As Integer
Dim d2 As Date=e.Form.Controls("日期").Value '当前日期
Dim lastD As Date = d2.AddMonths(-1) '上一个月的日期
Dim d1 As New Date(lastD.Year, lastD.Month, Date.DaysInMonth(lastD.Year,lastD.Month)) '上个月
n = d1.DayOfWeek
n1 = iif(n >0,7-n,0)
d1 =d1.Adddays(n1)
d2 =d2.Adddays(n1)
n=DateDiff("d", D1, D2)+1
n1 = -Int(-n/7)*2-iif(d2.DayOfWeek<>6,1,0)
e.Form.Controls("双休").Text = n - n1 & "天"

 

测试,11月份的工作日结果是22天,查看手机上的日历是20天,为什么对不上,9月10月对得上.分别是22和23天.

什么原因?


 回到顶部
帅哥哟,离线,有人找我吗?
石四
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:972 积分:7048 威望:0 精华:0 注册:2013/3/31 10:33:00
  发帖心情 Post By:2014/12/3 17:45:00 [显示全部帖子]

 

Dim d As Date=e.Form.Controls("日期").Value
Dim start As Date = new Date(d.Year, d.Month, 1)
d = start.AddMonths(1)
Dim c As Integer = 1-start.DayOfWeek
start = start.AddDays(c)
e.Form.Controls("双休").Text = ((((d- start).TotalDays + 1) \ 7) * 5 + c + d.AddDays(-1).DayOfWeek) & "天"

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
石四
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:972 积分:7048 威望:0 精华:0 注册:2013/3/31 10:33:00
  发帖心情 Post By:2014/12/3 17:52:00 [显示全部帖子]

没理得清上面的代码,单休工作日又怎么算?就是怎么计算全月天数减去周日天数.

 回到顶部
帅哥哟,离线,有人找我吗?
石四
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:972 积分:7048 威望:0 精华:0 注册:2013/3/31 10:33:00
  发帖心情 Post By:2014/12/3 17:59:00 [显示全部帖子]

反应过来了:

Dim d As Date=e.Form.Controls("日期").Value
Dim start As Date = new Date(d.Year, d.Month, 1)
d = start.AddMonths(1)
Dim c As Integer = 1-start.DayOfWeek
start = start.AddDays(c)
e.Form.Controls("双休").Text = ((((d- start).TotalDays + 1) \ 7) * 5 + c + d.AddDays(-1).DayOfWeek) & "天"

e.Form.Controls("单休").Text = ((((d- start).TotalDays + 1) \ 7) * 6 + c + d.AddDays(-1).DayOfWeek) & "天"


 回到顶部
帅哥哟,离线,有人找我吗?
石四
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:972 积分:7048 威望:0 精华:0 注册:2013/3/31 10:33:00
  发帖心情 Post By:2014/12/3 22:15:00 [显示全部帖子]

Dim d As Date = #5/1/2014#
Dim start As Date = new Date(d.Year, d.Month, 1)
d = start.AddMonths(1)
Dim c As Integer = 1-start.DayOfWeek
start = start.AddDays(c)
msgbox((((d- start).TotalDays + 1) \ 7) * 5 + c + d.AddDays(-1).DayOfWeek)

5月和6月的结果不正确,分别为28天和22天,正确的应为22和21.


 回到顶部
帅哥哟,离线,有人找我吗?
石四
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:972 积分:7048 威望:0 精华:0 注册:2013/3/31 10:33:00
  发帖心情 Post By:2014/12/3 22:16:00 [显示全部帖子]

其他月份都正确.

 


 回到顶部
帅哥哟,离线,有人找我吗?
石四
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:972 积分:7048 威望:0 精华:0 注册:2013/3/31 10:33:00
  发帖心情 Post By:2014/12/3 22:21:00 [显示全部帖子]

5月和6月,双休日天数不一致,一个是4天,另一个是5天.其他月份,周六和周日天数相等.

 


 回到顶部
帅哥哟,离线,有人找我吗?
石四
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:972 积分:7048 威望:0 精华:0 注册:2013/3/31 10:33:00
  发帖心情 Post By:2014/12/4 10:22:00 [显示全部帖子]

OK!

Dim d As Date = #5/1/2014#
Dim start As Date = new Date(d.Year, d.Month, 1)
d = start.AddMonths(1)
Dim c As Integer = 1-start.DayOfWeek
start = start.AddDays(c)
msgbox((((d- start).TotalDays + 1) \ 7) * 5 + c )
If c > 0 Then c = 0
If d.AddDays(-1).DayOfWeek <> 6 Then
    c += d.AddDays(-1).DayOfWeek
End If
msgbox((((d- start).TotalDays + 1) \ 7) * 6 + c)


 回到顶部