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


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

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

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


加好友 发短信
等级:七尾狐 帖子:1530 积分:10633 威望:0 精华:0 注册:2008/9/24 11:16:00
[求助]计算两个日期列的工作日(已解决)  发帖心情 Post By:2011/9/17 13:58:00 [只看该作者]

以下是计算两个日期列之间天数的代码,如果需要计算工作日,代码应该如何改,请各位老师指教,谢谢。

 

 

   If e.DataRow.IsNull("借用日期") And  e.DataRow.IsNull("归还日期") Then
        e.DataRow("借用天数")=Nothing
    Else
        Dim d1 As Date = e.DataRow("借用日期")
        Dim d2 As Date = e.DataRow("归还日期")
        If d1>d2
            e.DataRow("借用天数") = 0
        Else
            e.DataRow("借用天数") = (d2-d1).TotalDays
        End If
    End If

[此贴子已经被作者于2011-9-17 15:47:24编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/9/17 14:18:00 [只看该作者]

这个不好办的,传统节假日的放假安排不固定,都要等国务院通知,算不了。


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


加好友 发短信
等级:七尾狐 帖子:1530 积分:10633 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2011/9/17 14:41:00 [只看该作者]

在帮助中有关于日期间隔的函数(如下),不知如何使用,请狐爸老师根据本例指导一下,我需要的就是每周除去两个休息日。谢谢狐爸老师的回复。

计算两个日期的间隔。

语法

DateDiff(Interval, Date1, Date2)

Interval:表示时间间隔的类型。

Date1:起始日期

Date2:结束日期

Interval 包含以下设置:

yyyy 年
q 季度
m 月
y 某年的某一天
d 天
w 工作日
ww 周
h 时
n 分
s 秒


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/9/17 15:00:00 [只看该作者]

大概如此:

 

 

If e.DataRow.IsNull("借用日期") And  e.DataRow.IsNull("归还日期") Then
    e.DataRow("借用天数")=Nothing
Else
    Dim d1 As Date = e.DataRow("借用日期")
    Dim d2 As Date = e.DataRow("归还日期")
    If d1>d2
        e.DataRow("借用天数") = 0
    Else
        Dim cnt1 As Integer = (d2-d1).TotalDays
        Dim cnt2 As Integer
        For i As Integer = 1 To cnt
            Dim d3 As Date = d1.adddays(i)
            If d3.DayOfWeek = 0 OrElse d3.DayOfWeek = 6 Then '如果是星期6或者星期天
                cnt1= cnt1 -1
            End If
        Next
       e.DataRow("借用天数") = cnt
    End If
End If


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


加好友 发短信
等级:七尾狐 帖子:1530 积分:10633 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2011/9/17 15:47:00 [只看该作者]

谢谢狐爸老师,问题已解决,代码有一点小瑕疵,作了一点调整,附上,狐爸老师不会见怪吧。再次感谢狐爸老师的热心帮助!!


If e.DataRow.IsNull("借用日期") And  e.DataRow.IsNull("归还日期") Then
    e.DataRow("借用天数")=Nothing
Else
    Dim d1 As Date = e.DataRow("借用日期")
    Dim d2 As Date = e.DataRow("归还日期")
    If d1>d2
        e.DataRow("借用天数") = 0
    Else
        Dim cnt As Integer = (d2-d1).TotalDays
        For i As Integer = 1 To cnt
            Dim d3 As Date = d1.adddays(i)
            If d3.DayOfWeek = 0 OrElse d3.DayOfWeek = 6 Then '如果是星期天或者星期六
                cnt = cnt - 1
            End If
        Next
       e.DataRow("借用天数") = cnt
    End If
End If

 


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


加好友 发短信
等级:八尾狐 帖子:1812 积分:12999 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2011/9/17 15:54:00 [只看该作者]

Dim d1,d2 As Date
Dim n,n1 As Integer
d1 = #9/3/2011#
d2 =#9/24/2011#
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)
Output.Show(n-n1)

[此贴子已经被作者于2011-9-17 15:55:33编辑过]

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


加好友 发短信
等级:七尾狐 帖子:1530 积分:10633 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2011/9/17 16:16:00 [只看该作者]

谢谢don老师的回复,代码很简洁,收藏了,再次谢谢!!

 回到顶部
帅哥哟,离线,有人找我吗?
石四
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | 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天.

什么原因?


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/12/3 17:23:00 [只看该作者]

回复8楼

 

Dim d As Date = #8/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)


 回到顶部
帅哥哟,离线,有人找我吗?
石四
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | 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) & "天"

 

 


 回到顶部
总数 20 1 2 下一页