以文本方式查看主题
- Foxtable(狐表) (http://foxtable.com/bbs/index.asp)
-- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2)
---- [求助]计算两个日期列的工作日(已解决) (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=12843)
|
-- 作者:yyzlxc
-- 发布时间: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编辑过]
|
-- 作者:狐狸爸爸
-- 发布时间:2011/9/17 14:18:00
--
这个不好办的,传统节假日的放假安排不固定,都要等国务院通知,算不了。
|
-- 作者:yyzlxc
-- 发布时间:2011/9/17 14:41:00
--
在帮助中有关于日期间隔的函数(如下),不知如何使用,请狐爸老师根据本例指导一下,我需要的就是每周除去两个休息日。谢谢狐爸老师的回复。
计算两个日期的间隔。
语法
DateDiff(Interval, Date1, Date2)
Interval:表示时间间隔的类型。
Date1:起始日期
Date2:结束日期
Interval 包含以下设置:
yyyy 年 q 季度 m 月 y 某年的某一天 d 天 w 工作日
ww 周 h 时 n 分 s 秒
|
-- 作者:狐狸爸爸
-- 发布时间: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
-- 发布时间: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
-- 发布时间: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
-- 发布时间:2011/9/17 16:16:00
--
谢谢don老师的回复,代码很简洁,收藏了,再次谢谢!!
|
-- 作者:石四
-- 发布时间: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天.
什么原因?
|
-- 作者:有点甜
-- 发布时间: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)
|
-- 作者:石四
-- 发布时间: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) & "天"
|