我是一个SQL人员,但我需要一个函数来计算VB.NET中两个日期之间的平日数。我不需要担心假期。我不幸的是,我的尝试是徒劳的。非常感谢在Visual Basic中计算两个日期之间的平日数
这将进入Reporting Service 2008 R2中的自定义代码。
我是一个SQL人员,但我需要一个函数来计算VB.NET中两个日期之间的平日数。我不需要担心假期。我不幸的是,我的尝试是徒劳的。非常感谢在Visual Basic中计算两个日期之间的平日数
这将进入Reporting Service 2008 R2中的自定义代码。
试试这个。我修改了我一直在使用的现有函数。这将在SSRS 2008中起作用。请注意,如果您更熟悉C#,还可以使用C#编写代码,并且在部署它之后,只需从报告中引用该程序集即可。 1
public Shared Function Weekdays(ByRef startDate As Date, ByRef endDate As Date ) As integer
dim numWeekdays as Integer
dim totalDays as Integer
dim WeekendDays as Integer
numWeekdays = 0
WeekendDays = 0
totalDays = DateDiff(DateInterval.Day, startDate , endDate) + 1
for i as integer = 1 to totalDays
if DatePart(dateinterval.weekday,startDate) = 1 then
WeekendDays = WeekendDays + 1
end if
if DatePart(dateinterval.weekday, startDate) = 7 then
WeekendDays = WeekendDays + 1
end if
startDate = DateAdd("d", 1, startDate)
next
numWeekdays = totalDays - WeekendDays
return numWeekdays
End Function
东西要知道在此函数您正在修改startDate输入参数,这可能会导致调用此函数的代码中产生不必要的结果。你可以通过声明另一个DateTime来解决这个问题,如下所示:Dim workingStartDate As New DateTime(startDate.Ticks)。第一个totalDays分配结束时的+1也是不需要的。它把结果排除1. – kenjara
您不需要检查这些日期之间的每一天是否是工作日。
如果有n
天,那么有int(n/7)
整周,每个包含5个工作日,所以这是平日的5 * int(n/7)
。
然后您需要检查剩余部分周的日期(0..6天)。
其实MRAB你错了。考虑这两种情况:1。从周一至下周五的所选日期(共12天,10个工作日) 2.从周四至下个下周一的选定日期(共12天,8个工作日) – 2011-12-06 12:08:36
@TheMKBear 1.这是整整一周(周一至周日)加5天,全部5个工作日,共计10个工作日。 2.这是整整一周(从周四到周三)加上5天,其中3个工作日,共计8个工作日。 – MRAB
这可能会帮助别人寻找这个。此功能不会每天循环。
public static double WorkDays(DateTime start, DateTime end)
{
var delta = end.AddDays(1) - start;
var fullWeeks = (int)(delta.TotalDays/7);
var workDays = fullWeeks * 5;
var partialWeekDays = delta.TotalDays % 7;
if (partialWeekDays > 0)
{
var startWeekday = start.DayOfWeek;
var endWeekday = end.DayOfWeek;
if (startWeekday == DayOfWeek.Sunday || startWeekday == DayOfWeek.Saturday)
partialWeekDays--;
if (startWeekday > DayOfWeek.Sunday && startWeekday < DayOfWeek.Saturday &&
startWeekday > endWeekday)
partialWeekDays--;
if ((endWeekday == DayOfWeek.Sunday || endWeekday == DayOfWeek.Saturday) && endWeekday != startWeekday)
partialWeekDays--;
if (endWeekday > DayOfWeek.Sunday && endWeekday < DayOfWeek.Saturday &&
startWeekday > endWeekday)
partialWeekDays--;
}
return workDays + partialWeekDays;
}
我有一个表达式将计算两个日期之间的特定一天的数量。因此,如果您在星期一,星期二......星期五添加金额,您将获得周日数。
=SUM(int((DatePart("d",Fields!dteEndDateTime.Value) - Weekday(DateAdd("d",1-**[DayofWeek]**,Fields!dteEndDateTime.Value)) - DatePart("d",Fields!dteStartDateTime.Value) + 8)/7))
[DAYOFWEEK]是表示一天的整数:1 - Sunday; 2 - Monday
因此,将计算dteStartDateTime
和dteEndDateTime
之间星期一的量的表达式为:
=SUM(int((DatePart("d",Fields!dteEndDateTime.Value) - Weekday(DateAdd("d",1-2,Fields!dteEndDateTime.Value)) - DatePart("d",Fields!dteStartDateTime.Value) + 8)/7))
我认为这可能帮助
Public Shared Function WeekEndsBetweenDates(ByVal StartDate As Date, ByVal EndDate As Date) As Integer
Dim wkday, wkend As Integer
For i As Integer = 0 To DateDiff(DateInterval.Day, StartDate, EndDate)
If DateAdd(DateInterval.Day, i, StartDate).DayOfWeek = DayOfWeek.Saturday Or DateAdd(DateInterval.Day, i, StartDate).DayOfWeek = DayOfWeek.Sunday Then
wkend += 1
Else
wkday += 1
End If
Next
Return wkend
End Function
在这里,我返回了“wkend”,它是函数中变量的周末部分。或者,您可以将返回的值更改为“wkday”,即所选日期之间的周日数。 我希望这可以帮助。这对我的作品虽然
'这是我的版本vb.net 2013和它的作品
Private Sub enddate_ValueChanged(sender As Object, e As EventArgs) Handles enddate.ValueChanged
Dim countsun As Integer = 0
Dim countsat As Integer = 0
Dim nonholiday As Integer = 0
Dim totalDays = (enddate.Value - startdate.Value).Days
For i = 0 To totalDays
Dim Weekday As DayOfWeek = startdate.Value.Date.AddDays(i).DayOfWeek
If Weekday = DayOfWeek.Saturday Then
countsat += 1
End If
If Weekday = DayOfWeek.Sunday Then
countsun += 1
End If
If Weekday <> DayOfWeek.Saturday AndAlso Weekday <> DayOfWeek.Sunday Then
nonholiday += 1
End If
Next
lblSumHeadCount.Text = nonholiday & " Day(s)"
End Sub
' 感谢加布
http://stackoverflow.com/questions/1092589/is-there- a-net-method-equivalent-to-networkdays-in-excel –
爱C答案的VB问题。 – dbasnett
这里有一个类似的问题在C#中:http://stackoverflow.com/questions/165887/net-date-compare-count-the-amount-of-working-days-since-a-date –