我是一個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 –