2009-11-10 12 views
16

Ich muss einen Weg finden, um das Datum (TT/MM/JJJJ) des Montag für jede Woche zu finden, die wir sind.Das Datum von Montag in einer Woche mit VB.NET finden

Zum Beispiel für diese Woche, Montag wäre 09/11/2009, und wenn dies nächste Woche wäre, wäre es 16/11/2009.

Ich habe es geschafft, irgendwo in den Formen des Codes zu bekommen, aber alles, was ich bekam, war 'kann nicht in Integer' Fehler konvertieren. Ich habe Date.Today und AddDays() verwendet.

Danke für jede Hilfe. :)

+0

Gleiche Frage als http://stackoverflow.com/questions/1706589/datetime-question-in-vb-net ?? –

+0

Akzeptieren Sie eine Antwort. –

Antwort

5

DateTime.DayOfWeek ist eine Enum, die angibt, welcher Tag ein bestimmtes Datum ist. Am Montag 1 ist, können Sie den Montag der aktuellen Woche mit dem folgenden Code finden:

Dim monday As DateTime = Today.AddDays((Today.DayOfWeek - DayOfWeek.Monday) * -1) 
2
=Format(DateAdd("d", (-1 * WeekDay(Date.Today()) + 2), Date.Today()), "dd/MM/yyyy") 
34

Wenn der Sonntag des erste Tag der Woche ist, können Sie einfach tun:

Dim today As Date = Date.Today 
Dim dayDiff As Integer = today.DayOfWeek - DayOfWeek.Monday 
Dim monday As Date = today.AddDays(-dayDiff) 

Wenn montag der erste Tag der Woche ist:

Dim today As Date = Date.Today 
Dim dayIndex As Integer = today.DayOfWeek 
If dayIndex < DayOfWeek.Monday Then 
    dayIndex += 7 'Monday is first day of week, no day of week should have a smaller index 
End If 
Dim dayDiff As Integer = dayIndex - DayOfWeek.Monday 
Dim monday As Date = today.AddDays(-dayDiff) 
+0

Funktioniert perfekt, Prost. :) – Willis

+0

Sie können meine Antwort als akzeptiert dann :-) Auch wenn Sie etwas zu uns kommentieren möchten (wie Ihre Dankesnachricht) sollten Sie einen Kommentar zu Ihrer Frage hinzufügen oder Ihre Frage bearbeiten, anstatt eine Antwort hinzuzufügen. Willkommen bei Stack Overflow! –

+0

Funktioniert das tatsächlich, wenn der Tag Sonntag ist?Als ich es versuchte, bekam ich das Datum des ** folgenden ** Montag, nicht des vorherigen Montag. –

1

Eine einfache Methode, sollten Sie bekommen, was Sie wollen:

private static DateTime GetMondayForWeek(DateTime inputDate) 
    { 
     int daysFromMonday = inputDate.DayOfWeek - DayOfWeek.Monday; 
     return inputDate.AddDays(-daysFromMonday); 
    } 

Sie es auch für jeden Tag verlängern könnte, die Sie auch wollen:

private static DateTime GetDayForWeek(DateTime inputDate, DayOfWeek inputDay) 
    { 
     int daysAway = inputDate.DayOfWeek - inputDay; 
     return inputDate.AddDays(-daysAway); 
    } 

das erste Beispiel zu nennen, wie etwas verwenden:

DateTime mondayDate = GetMondayForWeek(new DateTime(2009, 11, 15)); 
Console.WriteLine(mondayDate); 
+0

C# an den neuen Typ füttern? (siehe Tags) –

+0

Ahhhh, habe das VB-Tag nicht gesehen. Ich stelle normalerweise Fragen, beantworte sie nicht, also ein wenig neu in der ganzen Antwort-Szene. Leider habe ich nicht einmal VB auf meinem Rechner. –

0

Ich habe das gerade in einem Projekt getan, an dem ich arbeite - ich verspreche, es ist korrekt. Dies ist eine Methode, die den n-ten Montag nach dem angegebenen Datum zurückgibt. Wenn das angegebene Datum ein Montag ist, wird der nächste Montag zurückgegeben.

Public Function GetSubsequentMonday(ByVal startDate As DateTime, ByVal subsequentWeeks As Integer) As DateTime 
    Dim dayOfWeek As Integer = CInt(startDate.DayOfWeek) 
    Dim daysUntilMonday As Integer = (Math.Sign(dayOfWeek) * (7 - dayOfWeek)) + 1 
    'number of days until the next Monday 
    Return startDate.AddDays(CDbl((daysUntilMonday + (7 * (subsequentWeeks - 1))))) 
End Function 
0

von meinen Kommentaren zu antworten Meta-Knight Im Anschluss an, hier eine kurze Funktion, die die Korrektur I in den Kommentaren erwähnen macht:

Public Function GetFirstOfLastWeek() As DateTime 
Dim today As DateTime, daysSinceMonday As Integer 
    today = DateTime.Today 
    daysSinceMonday = today.DayOfWeek - DayOfWeek.Monday 
    If daysSinceMonday < 0 Then 
     daysSinceMonday += 7 
    End If 
    Return today.AddDays(-daysSinceMonday) 
End Function 
0

Und wenn Ihre Woche von Montag beginnt dann können Sie so etwas wie folgt verwenden:

DateTime mondayDate = DateTime.Now.AddDays(((DateTime.Now.DayOfWeek == DayOfWeek.Sunday?7: (int)DateTime.Now.DayOfWeek) - 1)*-1); 

DateTime sundayDate = DateTime.Now.AddDays(7 - (DateTime.Now.DayOfWeek == DayOfWeek.Sunday?7: (int)DateTime.Now.DayOfWeek)); 
1

Ein weiterer Ansatz, wenn der Montag ist der erste Tag, ist dies:

Dim today As Date = Date.Today 
       Dim dayDiff As Integer = today.DayOfWeek - DayOfWeek.Monday 
       Dim monday As Date = today.AddDays(-dayDiff) 

       dayDiff = DayOfWeek.Saturday - today.DayOfWeek + 1 
       Dim sunday As Date = today.AddDays(dayDiff) 
Verwandte Themen