vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2020
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Tipp 304: Alle Tage zweier Datumswerte ermitteln 
Autor: manuelhasi
Datum: 04.02.20 21:01

Hallo zusammen...

leider hilft mir dieser Tipp unter vb.net nicht weiter, da er nicht funktioniert...

Was müsste hier geändert werden, damit die Funktion laufen würde bzw. kennt jemand einen anderen Weg, um alle Tage zwischen zwei Datumwerten zu ermitteln und auszugeben?

lg
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tipp 304: Alle Tage zweier Datumswerte ermitteln 
Autor: Manfred X
Datum: 05.02.20 00:05

Irgend so etwas vielleicht ....

   Public Function Datumschleife(ByVal Datum_1 As Date, Datum_2 As Date,
       Optional ByVal WTage As String = "") As String
 
        Dim anzahltage As Long
        Dim starttag As Date
        Dim ergebnis As String
        Dim einzeldatum As Date
        Dim y As Long
        Dim strTage As New System.Text.StringBuilder
 
        ' wenn keine zu zählenden Wochentage angegeben wurden
        ' alle Wochentage berücksichtigen
        If WTage = "" Then WTage = "Mo;Di;Mi;Do;Fr;Sa;So"
 
        ' Anzahl Tage zwischen Datum1 und Datum2 ermitteln
        anzahltage = Microsoft.VisualBasic.DateDiff("D", Datum_1, Datum_2)
 
        ' Beginnen mit Datum1
        starttag = Datum_1
        For y = 0 To anzahltage
            einzeldatum = Microsoft.VisualBasic.DateAdd("d", y, starttag)
            ergebnis = Strings.Left(Strings.Format(einzeldatum, "dddd"), 2) &
                      ", " & Strings.Format(einzeldatum, "dd.MM.yyyy") 
                      'Beachte MM
 
            ' Prüfen, ob ermittelter Wochentag berücksichtigt
            ' werden soll
            If InStr(WTage, Strings.Left$(ergebnis, 2)) > 0 Then
                strTage.Append(ergebnis & ";")
            End If
        Next y
        Return strTage.Remove(strTage.Length - 1, 1).ToString
 
    End Function
Anwendung:
 Dim Datum1 As Date = CDate("13.08.2001")
 Dim Datum2 As Date = CDate("29.08.2001")
 
 Dim dt As String = Datumschleife(Datum1, Datum2, "Mo")


Beitrag wurde zuletzt am 05.02.20 um 00:32:25 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tipp 304: Alle Tage zweier Datumswerte ermitteln 
Autor: manuelhasi
Datum: 05.02.20 08:51

vielen Dank für die schnelle Antwort

.. jetzt geht es...

Es ist doch immer wieder bemerkenswert, wie schnell ihr euch in gewisse Thematiken einlesen könnt und wie schnell ihr dann auch immer eine Lösung parat habt..
Auch wenn es hier nur "Kleinigkeiten" waren.

Vielen lieben Dank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tipp 304: Alle Tage zweier Datumswerte ermitteln 
Autor: manuelhasi
Datum: 05.02.20 09:37

ne kleine Frage hätte ich aber noch..

ich würde gerne das Ergebnis nicht als string wiedergeben sondern jeden Tag einzeln als Item in einer Listview anzeigen?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tipp 304: Alle Tage zweier Datumswerte ermitteln 
Autor: HenryV
Datum: 05.02.20 09:54

Ich hab es mir auch einmal angeschaut und es in Kombination mit Tipp Enumerationen als Bitfelder nutzen gelöst.
<Flags()>
Public Enum WT As Integer
    Mo = 1       '0. Bit
    Di = 2       '1 .Bit
    Mi = 4       '2. Bit
    [Do] = 8     '3. Bit
    Fr = 16      '4. Bit
    Sa = 32      '5. Bit
    So = 64      '6. Bit
End Enum
 
Public Function Datumschleife(ByVal DateStart As Date, ByVal DateEnd As Date, _
  Optional ByVal WTage As Integer = 127) As List(Of Dat
 
    ' Anzahl Tage zwischen Datum1 und Datum2 ermitteln
    Dim Days As Integer = DateEnd.Subtract(DateStart).Days + 1
    Datumschleife = New List(Of Date)
 
    For i As Integer = 0 To Days - 1
 
        ' Prüfen, ob ermittelter Wochentag berücksichtigt werden soll
        Select Case True
            Case DateStart.AddDays(i).DayOfWeek = DayOfWeek.Monday AndAlso _
              CBool(WTage And (1 << 0))
                Datumschleife.Add(DateStart.AddDays(i))
            Case DateStart.AddDays(i).DayOfWeek = DayOfWeek.Tuesday AndAlso _
              CBool(WTage And (1 << 1))
                Datumschleife.Add(DateStart.AddDays(i))
            Case DateStart.AddDays(i).DayOfWeek = DayOfWeek.Wednesday AndAlso _
              CBool(WTage And (1 << 2))
                Datumschleife.Add(DateStart.AddDays(i))
            Case DateStart.AddDays(i).DayOfWeek = DayOfWeek.Thursday AndAlso _
              CBool(WTage And (1 << 3))
                Datumschleife.Add(DateStart.AddDays(i))
            Case DateStart.AddDays(i).DayOfWeek = DayOfWeek.Friday AndAlso _
              CBool(WTage And (1 << 4))
                Datumschleife.Add(DateStart.AddDays(i))
            Case DateStart.AddDays(i).DayOfWeek = DayOfWeek.Saturday AndAlso _
              CBool(WTage And (1 << 5))
                Datumschleife.Add(DateStart.AddDays(i))
            Case DateStart.AddDays(i).DayOfWeek = DayOfWeek.Sunday AndAlso _
              CBool(WTage And (1 << 6))
                Datumschleife.Add(DateStart.AddDays(i))
        End Select
    Next
 
    Return Datumschleife
 
End Function
Anwendung:
Dim wts As Integer = WT.Mo Or WT.Di Or WT.Mi Or WT.Do Or WT.Fr
Dim l As List(Of Date) = Datumschleife(New Date(2020, 1, 1), Date.Today, wts)
For Each d As Date In l
    ListView1.Items.Add(d.ToLongDateString)
Next
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tipp 304: Alle Tage zweier Datumswerte ermitteln 
Autor: manuelhasi
Datum: 05.02.20 11:53

Danke

für den Ursprungstipp von Manfred siehts dann so aus

 Public Function Datumschleife(ByVal Datum_1 As Date, Datum_2 As Date, Optional _
   ByVal WTage As String = "") As List(Of String)
 
        Dim anzahltage As Long
        Dim starttag As Date
        Dim ergebnis As String
        Dim einzeldatum As Date
        Dim y As Long
        Dim strTage As New System.Text.StringBuilder
        Datumschleife = New List(Of String)
 
        ' wenn keine zu zählenden Wochentage angegeben wurden
        ' alle Wochentage berücksichtigen
        If WTage = "" Then WTage = "Mo;Di;Mi;Do;Fr;Sa;So"
 
        ' Anzahl Tage zwischen Datum1 und Datum2 ermitteln
        anzahltage = Microsoft.VisualBasic.DateDiff("D", Datum_1, Datum_2)
 
        ' Beginnen mit Datum1
        starttag = Datum_1
        For y = 0 To anzahltage
            einzeldatum = Microsoft.VisualBasic.DateAdd("d", y, starttag)
            ergebnis = Strings.Left(Strings.Format(einzeldatum, "dddd"), 2) & "" & _
              " " & Strings.Format(einzeldatum, "dd.MM.yy")
            'Beachte MM
 
            ' Prüfen, ob ermittelter Wochentag berücksichtigt
            ' werden soll
            If InStr(WTage, Strings.Left$(ergebnis, 2)) > 0 Then
                strTage.Append(ergebnis & " ")
            End If
            Datumschleife.Add(ergebnis)
        Next y
        Return Datumschleife
    End Function
Aufruf
Dim l As List(Of String) = Datumschleife("10.02.20", "20.02.20", "")
For Each d As String In l
ListViewTerminübersicht.Items.Add(d)
Next
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tipp 304: Alle Tage zweier Datumswerte ermitteln 
Autor: Manfred X
Datum: 05.02.20 20:12

Vorsicht. Wenn Du den Wochentagefilter verwenden willst,
muss folgende Codezeile in die darüberstehende Bedingung:
Datumschleife.Add(ergebnis)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tipp 304: Alle Tage zweier Datumswerte ermitteln 
Autor: Manfred X
Datum: 05.02.20 20:44

Hallo!

Mit "DayOfWeek" gibt es bereits eine Enumeration der Wochentage.
Als Funktions-Parameter kann man eine Liste oder ein Array dieser Werte
übergeben und in der Funktion prüfen, ob der Wochentag des aktuellen
Datums in dieser Liste enthalten ist.
Der Aufbau einer bitweise kombinierbaren Enumeration ist deshalb
eigentlich unnötig.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tipp 304: Alle Tage zweier Datumswerte ermitteln 
Autor: HenryV
Datum: 07.02.20 08:41

Da hast du natürlich Recht. Das macht die Sache auch viel einfacher.
Public Function Datumschleife(ByVal DateStart As Date, ByVal DateEnd As Date, _
  Optional ByVal WTage As List(Of DayOfWeek) = Nothing) As List(Of Date)
 
    ' Anzahl Tage zwischen Datum1 und Datum2 ermitteln
    Dim Days As Integer = DateEnd.Subtract(DateStart).Days + 1
    Datumschleife = New List(Of Date)
 
    For i As Integer = 0 To Days - 1
        ' Prüfen, ob ermittelter Wochentag berücksichtigt werden soll
        ' wenn keine zu zählenden Wochentage angegeben wurden
        ' werden alle Wochentage berücksichtigen
        If WTage Is Nothing OrElse WTage.Contains(DateStart.AddDays( _
          i).DayOfWeek) Then
            Datumschleife.Add(DateStart.AddDays(i))
        End If
    Next
 
    Return Datumschleife
 
End Function
Dim wts As List(Of DayOfWeek) = New List(Of DayOfWeek) From {DayOfWeek.Monday, _
  DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Thursday, DayOfWeek.Friday}
 
Dim l As List(Of Date) = Datumschleife(New Date(2020, 1, 1), Date.Today, wts)
For Each d As Date In l
    ListView1.Items.Add(d.ToLongDateString)
Next
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2020 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel