vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

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

VB.NET - Ein- und Umsteiger
Re: Datum Zeitspanne rechnen 
Autor: Erichbru
Datum: 11.04.24 17:14

Danke Kuno60,

werd mich noch mal intensiver damit befassen

ich habe das auch mal im Netz verglichen mit einem "Tageszähler zwischen 2 Daten"

der Code sieht nun so aus:

  Private Sub Zeitraum(d1 As Date, d2 As Date)
        Dim sbMeldung As New System.Text.StringBuilder
 
        Dim ts As TimeSpan = d2 - d1 'Differenz
        Dim tage As Integer = ts.Days
        ' Zeitraum mit tatsächlichen Tagen der einzelnen Monate.
        Dim d As Date = d1, x As Date, m As Integer = 0
        sbMeldung.AppendFormat("{0} {1} {2} {3}", "Zeitraum: ", Format(d1, "ddd" & _
          "- dd-MMM-yyyy"), " - ", Format(d2, "ddd - dd-MMM-yyyy"))
        sbMeldung.AppendLine()
        sbMeldung.AppendLine()
        sbMeldung.AppendFormat("{0} {1}", "Länge in Tagen: ", tage & " Tage")
        sbMeldung.AppendLine()
        sbMeldung.AppendFormat("{0} {1} {2} {3}", "Länge in Wochen: ", tage \ 7 _
          & " Wochen und ", tage Mod 7, " Tage")
        sbMeldung.AppendLine()
        ''sbMeldung.AppendFormat("{0} {1} {2}", "Länge: " & tage & " Tage", _
          ts.Hours & " Stunden", " und " & m & " Minuten")
        Do
            x = d1.AddMonths(m + 1)
            If x > d2 Then Exit Do
            d = x : m += 1
        Loop
 
        ts = d2 - d
        tage = ts.Days
 
        sbMeldung.AppendFormat("{0} {1} {2}", "Länge des Zeitraums: ", m & "" & _
          "Monate ", tage \ 7 & " Wochen")
        '', tage Mod 7, " Tage", ts.Hours & " Stunden", " und ", m & " Minuten")
        '----------------------------------------------------------------------
        MessageBox.Show(sbMeldung.ToString, "Ablesedaten-Eingabe-Status", _
          MessageBoxButtons.OK, MessageBoxIcon.Information)
 
    End Sub
das Ergebnis im direkten vergleich



gibt es da nun noch etwas zu berücksichtigen ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Datum Zeitspanne rechnen 
Autor: Erichbru
Datum: 08.04.24 16:34

wie kann ich das nachstellen ?

ich gebe ein Datum ein mit Uhrzeit > 21.06.2023 11:17 zBsp.

wie ich die differenz rechne weiß ich, aber ich möchte so ein Ergbnis

Zeitraum: Mi, 21.06.2023 - Mo, 08.04.2024
Länge des Zeitraums: 9 Monate, 2 Wochen, 4 Tage
Länge in Tagen: 292 Tage
Länge in Wochen: 41 Wochen, 5 Tage


Ergebnis in ein Label anzeigen!

Danke für die Hilfe

Beitrag wurde zuletzt am 08.04.24 um 16:39:11 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datum Zeitspanne rechnen 
Autor: Manfred X
Datum: 08.04.24 18:34

Hallo!

Diese Darstellungen eines Zeitintervalls sind sachlich nicht eindeutig durchführbar.
Kalenderwochen und Kalendermonate oder Zeiträume?

Sollen für einen Monat pauschal 30 Tage angesetzt werden? Oder sollen die tatsächlichen
vollen Monate im Zeit-Intervall gezählt werden?
Tage im Anfangsmonat und im Endmonat wie einbeziehen?
Ist der Zeitraum vom 15.2 bis 16.3 eines Jahres als ein Monat zu betrachten?

Das gleiche gilt sinngemäß bei der Intervallangabe in Tagen oder in Wochen und Tagen.
Wie wird eine Woche definiert?
Als beliebiges Intervall von 7 Tagen oder als Abfolge fester Intervalle z.B.
jeweils von von Montag bis Sonntag?


Falls es nur um Zeitintervalle geht, reicht es vermutlich, die Zahl der Tage im Intervall
ganzzahlig durch 30 zu dividieren (Zahl der Monate, Divisionsrest: Tage) - bzw durch 7 (Wochen).

Beitrag wurde zuletzt am 08.04.24 um 18:46:12 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datum Zeitspanne rechnen 
Autor: Erichbru
Datum: 10.04.24 17:40

Hallo Manfred,

Danke für deine Antwort

ganzzahlig durch 30 zu dividieren (Zahl der Monate, Divisionsrest: Tage) - bzw durch 7 (Wochen) ?

ich möchte nach Eingabe der Ablesedaten:

21.01.2023 erste Ablesung = Nothing bzw. 0
21.02.2023 hier soll nun die Differenz in Monate, Wochen, Tagen berechnet werden
21.03.2023 die Differenz zum 21.02.2023

oder mach ich es mir schon wieder zu kompliziert ?

 Dim NL As String = Environment.NewLine
        Dim Titel As String = "Statusmeldung"
        'Ableseintervall Variable (Tage)
        Dim interval_days As Integer
        '-----------------------------------------------------
        For Zeile As Integer = 0 To DGVStrom.Rows.Count - 2
 
            Dim d1 As Date = Date.Parse(DGVStrom.Rows(Zeile).Cells(1).Value)
            Dim d2 As Date = Date.Parse(DGVStrom.Rows(Zeile + 1).Cells(1).Value)
 
            'aktuelles Ableseintervall in Tagen
            interval_days = (d2 - d1).TotalDays
 
            If Zeile = 0 Then
 
                Dim Meldung As String = String.Concat(NL, "erste Ablesung," & _
                  "keine Berechnung")
                MessageBox.Show(Meldung, Titel, MessageBoxButtons.OK, _
                MessageBoxIcon.Information)
 
            Else
 
                'wenn Monate = 30 Tage dann interval_days / 30
                'wenn Monatsgenau dann 3/31 + 3/30
                Dim Meldung As String = String.Concat(NL, Zeile, NL, _
                                                          "Monate: " & CInt( _
                                                          interval_days / 30), _
                                                          NL, _
                                                          "Wochen: " & ( _
                                                          interval_days / 30) / _
                                                          7, NL, _
                                                          "Tage:   " & "?")
                MessageBox.Show(Meldung, Titel, MessageBoxButtons.OK, _
                  MessageBoxIcon.Information)
 
 
 
            End If
 
 
        Next
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datum Zeitspanne rechnen 
Autor: Manfred X
Datum: 10.04.24 19:44

Hallo!

Die Differenz zwischen zwei Datumswerten (ohne Uhrzeit) ist durch die Anzahl der Tage gegeben.
Andere Angaben sind Umrechnungen. (Dabei fließen - wie oben bereits erwähnt - Vorgaben ein.)

Zwischen den Datumsangaben 21.1.23 - 21.2.23 - 21.3.23 liegt stets ein Monat, allerdings jeweils
mit unterschiedlicher Zahl von Tagen (31 bzw. 28).

Beim kaufmännischen Rechnen werden oft - aber nicht immer - pauschal 30 Tage für einen Monatszeitraum
angesetzt.
Dein erstes Intervall betrüge in dem Fall einen Monat und einen Tag.
Das zweite Intervall betrüge 0 Monate und 28 Tage.

Die ganzahlige Division verwendet den \-Operator.
Den Rest der ganzzahligen Division bestimmt man durch den MOD-Operator.
Keine Rundung.

Beitrag wurde zuletzt am 10.04.24 um 19:48:58 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datum Zeitspanne rechnen 
Autor: Kuno60
Datum: 11.04.24 02:31

Hallo
  Sub Zeitraum(d1 As Date, d2 As Date)
    Console.WriteLine($"Zeitraum: {d1:f} - {d2:f}")
    Console.WriteLine()
    Dim ts As TimeSpan = d2 - d1 'Differenz
    Console.WriteLine($"Länge: {ts:d' Tage, 'h' Stunden und 'm' Minuten'}")
    Dim tage As Integer = ts.Days
    Console.WriteLine($"Länge in Tagen: {tage} Tage")
    Console.WriteLine($"Länge in Wochen: {tage \ 7} Wochen und {tage Mod 7}" & _
      "Tage")
    '-------------------------------------------------------
    ' Zeitraum mit tatsächlichen Tagen der einzelnen Monate.
    Dim d As Date = d1, x As Date, m As Integer = 0
    Do
      x = d1.AddMonths(m + 1)
      If x > d2 Then Exit Do
      d = x : m += 1
    Loop
    ts = d2 - d
    tage = ts.Days
    Console.WriteLine($"Länge des Zeitraums: {m} Monate, {tage \ 7} Wochen," & _
      "{tage Mod 7} Tage, {ts:h' Stunden und 'm' Minuten'}")
  End Sub
 
' mit diesem Aufruf:
Zeitraum(#2023/06/21 11:17#, #2024/04/08 17:20#)
 
' ergibt sich dieses Ergebnis:
 
'Zeitraum: Mittwoch, 21. Juni 2023 11:17 - Montag, 8. April 2024 17:20
 
'Länge: 292 Tage, 6 Stunden und 3 Minuten
'Länge in Tagen: 292 Tage
'Länge in Wochen: 41 Wochen und 5 Tage
'Länge des Zeitraums: 9 Monate, 2 Wochen, 4 Tage, 6 Stunden und 3 Minuten
Der Zeitraum wird hier mit den tatsächlichen Tagen der Monate berechnet. Dies stimmt mit deinen Angaben überein.
Nur für Anzeigezwecke ist das ok. Rechnen sollte man aber nur mit Tagen, alles andere wird ungenau.
Du kannst dies auch als Funktion schreiben, die den Zeitraum als String zurück gibt.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datum Zeitspanne rechnen 
Autor: Manfred X
Datum: 11.04.24 09:42

Hallo!

Ich kann vor dieser Routine nur warnen.

Das Zeit-Intervall wird in der Genauigkeit von Stunden und Minuten angegeben,
obwohl in der Monats-Angabe beim Vergleich +/- 3 Tage drin stecken.
Diese Ungenauigkeit ist auch bei Verwendung einer Label-Anzeige irreführend.

Um eine größere Zahl von Tagen anschaulich zu machen, kann man die Zahl der Monate
(je 30 Tage) und der Wochen (je 7 Tage) angeben.
Die Zahl der zusätzlichen Tage im Intervall und die Stunden/Minuten entfallen.

Will man die Tage (und die Stunden/Minuten) genau angeben, sollte man die Zahl der
Monate weg lassen und das Intervall auf die Anzahl von Wochen und Tagen (+Stunden/Minuten)
beziehen.

Beitrag wurde zuletzt am 11.04.24 um 09:47:56 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datum Zeitspanne rechnen 
Autor: Erichbru
Datum: 11.04.24 11:53

wenn ich das abrufe gibt es Probleme

Zeitraum("#2023/06/21 11:17#", "#2024/04/08 17:20#")
1. ungültige Zeichen
2.
Länge in Wochen: {tage \ 7} Wochen und {tage Mod 7}Tage
Länge des Zeitraums: {m} Monate, {tage \ 7} Wochen,{tage Mod 7} Tage, {ts:h' 
' Stunden und 'm' Minuten'}
Der Thread 'vshost.RunParkingWindow' (0x13fc) hat mit Code 0 (0x0) geendet.
Der Thread '<Kein Name>' (0x22e8) hat mit Code 0 (0x0) geendet.
Das Programm "[7288] MyArchiv.vshost.exe: Verwaltet (v4.0.30319)" wurde mit _
  Code 0 (0x0) beendet.
ich erhalte also kein Ergebnis
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datum Zeitspanne rechnen 
Autor: Kuno60
Datum: 11.04.24 12:50

Hallo

Dieses Beispiel habe ich mit VS2022 erstellt. Es funktioniert auch mit VS2019. Nicht mit älteren Versionen.

Die Zeilenumbrüche, die dieses Forum automatisch macht, sind nicht immer korrekt und du musst sie entfernen.

Das ist so nicht gültig:
Länge des Zeitraums: {m} Monate, {tage \ 7} Wochen,{tage Mod 7} Tage, {ts:h' 
' Stunden und 'm' Minuten'}
Der letzte Teil muss so sein:
... Tage, {ts:h' Stunden und 'm' Minuten'}")
Der grüne Text ist kein Kommentar!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datum Zeitspanne rechnen 
Autor: Erichbru
Datum: 11.04.24 14:27

ich habs mal umgeschrieben

Ergebnisse:


und



und was nun, was ist noch falsch oder unrichtig.

und wie ich habe eine Zeilenpaarung siehe Bildmaterial



Aufruf:
Zeitraum("2023.02.21 11:27", "2023.03.21 11:37")
 Sub Zeitraum(d1 As Date, d2 As Date)
        Dim ts As TimeSpan = d2 - d1 'Differenz
        Dim tage As Integer = ts.Days
 
        ' Zeitraum mit tatsächlichen Tagen der einzelnen Monate.
        Dim d As Date = d1, x As Date, m As Integer = 0
        Do
            x = d1.AddMonths(m + 1)
            If x > d2 Then Exit Do
            d = x : m += 1
        Loop
        ts = d2 - d
        tage = ts.Days
 
        Dim sbMeldung As New System.Text.StringBuilder
 
        sbMeldung.AppendFormat("{0} {1} {2} {3}", "Zeitraum: ", Format(d1, _
          "dddd - dd-MMM-yyyy HH:mm"), " - ", Format(d2, "dddd - dd-MMM-yyyy" & _
          "HH:mm"))
        sbMeldung.AppendLine()
        sbMeldung.AppendLine()
        sbMeldung.AppendFormat("{0} {1}", "Länge in Tagen: ", ts.Days & " Tage")
        sbMeldung.AppendLine()
        sbMeldung.AppendFormat("{0} {1} {2} {3}", "Länge in Wochen: ", ts.Days _
          \ 7 & " Wochen und ", ts.Days Mod 7, " Tage")
        sbMeldung.AppendLine()
        sbMeldung.AppendLine()
        sbMeldung.AppendFormat("{0} {1} {2}", "Länge: " & ts.Days & " Tage", _
          ts.Hours & " Stunden", " und " & ts.Minutes & " Minuten")
        sbMeldung.AppendLine()
        sbMeldung.AppendLine()
        sbMeldung.AppendLine()
        sbMeldung.AppendFormat("{0} {1} {2} {3} {4} {5} {6} {7}", "Länge des" & _
          "Zeitraums: ", m & " Monate ", ts.Days \ 7 & _
                               " Wochen", ts.Days Mod 7, " Tage", ts.Hours & "" & _
                               "Stunden", " und ", ts.Minutes & " Minuten")
        '-funktioniert, aber ManfredX meint was anderes ?
        MsgBox(sbMeldung.ToString)
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datum Zeitspanne rechnen 
Autor: Kuno60
Datum: 11.04.24 15:11

Ist dir aufgefallen, dass ich am Ende den beiden Variablen "ts" und "tage", neue Werte zuweise?
ts = d2 - d
tage = ts.Days
Wenn du die Auswertung erst danach machst, solltest du dafür 2 neue Variablen deklarieren und diese dann am Ende der Auswertung verwenden.
Z.B.:
Dim ts2 As TimeSpan = d2 - d
Dim tage2 as Integer = ts.Days
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datum Zeitspanne rechnen 
Autor: Kuno60
Datum: 11.04.24 15:26

Es ist klar, dass diese Routine nicht exakt die Monate berechnen kann, da jeder Monat eine andere Anzahl an Tagen hat.
Das Ergebnis entspricht aber der Vorgabe von Erichbru.

Ich verwende meistens den Wert 30,4375 (365,25 / 12). Das ergibt bei grafischen Darstellungen eine einheitliche Breite der Monate.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datum Zeitspanne rechnen 
Autor: Kuno60
Datum: 11.04.24 16:11

Also hier nochmal die komplette Funktion mit StringBuilder:

Formate kannst du direkt innerhalb der geschweiften Klammern angeben.
Das Format "f" entspricht dem kulturabhängigen langen Format.
  Function Zeitraum(d1 As Date, d2 As Date) As String
    Dim ts As TimeSpan = d2 - d1 'Differenz
 
    ' Zeitraum mit tatsächlichen Tagen der einzelnen Monate.
    Dim d As Date = d1, x As Date, m As Integer = 0
    Do
      x = d1.AddMonths(m + 1)
      If x > d2 Then Exit Do
      d = x : m += 1
    Loop
    Dim ts2 As TimeSpan = d2 - d
 
    Dim sb As New System.Text.StringBuilder
 
    sb.AppendFormat("Zeitraum: {0:f} - {1:f}", d1, d2)
    sb.AppendLine()
    sb.AppendLine()
    sb.AppendFormat("Länge in Tagen: {0} Tage", ts.Days)
    sb.AppendLine()
    sb.AppendFormat("Länge in Wochen: {0} Wochen und {1} Tage", ts.Days \ 7, _
      ts.Days Mod 7)
    sb.AppendLine()
    sb.AppendLine()
    sb.AppendFormat("Länge: {0} Tage, {1} Stunden und {2} Minuten", ts.Days, _
      ts.Hours, ts.Minutes)
    'oder auch so:
    'sb.AppendFormat("Länge: {0:%d} Tage, {0:%h} Stunden und {0:%m} Minuten", 
    ' ts)
    sb.AppendLine()
    sb.AppendLine()
    sb.AppendLine()
    sb.AppendFormat("Länge des Zeitraums: {0} Monate, {1} Wochen, " _
      & "{2} Tage, {3} Stunden und {4} Minuten", _
      m, ts2.Days \ 7, ts2.Days Mod 7, ts2.Hours, ts2.Minutes)
    Return sb.ToString
  End Function


Beitrag wurde zuletzt am 11.04.24 um 16:38:42 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datum Zeitspanne rechnen 
Autor: Erichbru
Datum: 12.04.24 09:45

Hallo Kuno60,

kannst du mir erklären warum Manfredx Zitat: Ich kann vor dieser Routine nur warnen.
vor deiner Routine warnt, OK weil wohl ungenau aber verstehe es halt noch nicht ganz, was macht deine Routine genau

   Dim ts As TimeSpan = d2 - d1 'Differenz
 
        ' Zeitraum mit tatsächlichen Tagen der einzelnen Monate.
        Dim d As Date = d1, x As Date, m As Integer = 0
        Do
            x = d1.AddMonths(m + 1)
            If x > d2 Then Exit Do
            d = x : m += 1
        Loop
 
        Dim ts2 As TimeSpan = d2 - d
Danke euch für die Antworten auf diesen Post
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datum Zeitspanne rechnen 
Autor: Manfred X
Datum: 12.04.24 11:45

Hallo!

Ich hatte meine Warnung doch begründet.
Diese Routine zählt die Länge der Monate (in Tagen), die innerhalb des Zeitintervalls liegen
(ohne ggf. Resttage in Schlussmonat[en]).
Die Zahl dieser so ermittelten Tage ist davon abhängig, in welchem Monat das Intervall beginnt.
Das führt dazu, dass zwei gleichlange Zeitintervalle, die aber in verschiedenen Monaten beginnen,
in der Darstellung (Monate, Wochen, Tage) sich um mehrere Tage unterscheiden können.

Datenanalytisch formuliert: Eine berechneter oder gemessener Wert sollte nie mit höherer Genauigkeit
angegeben werden, als er tatsächlich besitzt.

Beitrag wurde zuletzt am 12.04.24 um 11:48:10 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datum Zeitspanne rechnen 
Autor: Kuno60
Datum: 12.04.24 18:53

Erichbru schrieb:
Zitat:

Hallo Kuno60,

kannst du mir erklären warum Manfredx Zitat: Ich kann vor
dieser Routine nur warnen.
vor deiner Routine warnt, OK weil wohl ungenau aber verstehe
es halt noch nicht ganz, was macht deine Routine genau


Diese Routine macht gefährliche Sachen! Die Warnung von ManfredX solltest du ernst nehmen! Da ist schon so mancher PC explodiert. 🤣🤣


Das macht die Schleife wirklich:
    Do
      x = d1.AddMonths(m + 1)
      If x > d2 Then Exit Do
      m += 1
      Console.WriteLine($"Monat {m}: {x:d}  Tage: {(x - d).Days} Summe: {(x -" & _
        "d1).Days}")
      d = x
    Loop
 
'Ausgabe:
 
'Zeitraum: Mittwoch, 21. Juni 2023 - Freitag, 12. April 2024
 
'Länge in Tagen: 296 Tage
 
'Monat 1: 21.07.2023  Tage: 30 Summe: 30
'Monat 2: 21.08.2023  Tage: 31 Summe: 61
'Monat 3: 21.09.2023  Tage: 31 Summe: 92
'Monat 4: 21.10.2023  Tage: 30 Summe: 122
'Monat 5: 21.11.2023  Tage: 31 Summe: 153
'Monat 6: 21.12.2023  Tage: 30 Summe: 183
'Monat 7: 21.01.2024  Tage: 31 Summe: 214
'Monat 8: 21.02.2024  Tage: 31 Summe: 245
'Monat 9: 21.03.2024  Tage: 29 Summe: 274
 
'Länge des Zeitraums: 9 Monate und 22 Tage
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datum Zeitspanne rechnen 
Autor: Manfred X
Datum: 12.04.24 19:00

Hallo!

Häufiger als die PCs explodieren vermutlich die Nutzer der Programme,
in die diese Routine eingebaut ist.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datum Zeitspanne rechnen 
Autor: Kuno60
Datum: 12.04.24 19:10

👍😁
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datum Zeitspanne rechnen 
Autor: Erichbru
Datum: 13.04.24 10:15

dann verstehe ich nun garnicht, warum die Routine hier vorgestellt wurde

als Demo ? wie muss die Routine denn nun aussehen ?

Danke!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datum Zeitspanne rechnen 
Autor: Erichbru
Datum: 16.04.24 12:13

Hallo Manfred, hallo Kuno
was ist nun geeigneter ?

1. Variante (DateDiff) ?
2. Variante Routine Kuno60 ?
3. Variante ist nur so habe ein bisschen recherchiert

mich würde da noch die Variante Manfred interessieren




Danke
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datum Zeitspanne rechnen 
Autor: Manfred X
Datum: 16.04.24 14:05

Hallo!

Kaufmännisch:
Dim totaldays As Integer = 1155
 
Dim years As Integer = totaldays \ 360  'Zinsjahr
Dim months As Integer = (totaldays - years * 360) \ 30
Dim weeks As Integer = (totaldays - years * 360 - months * 30) \ 7
Dim days As Integer = totaldays - years * 360 - months * 30 - weeks * 7
Man kann eventuell für jedes Jahr noch 5 Tage von Totaldays abziehen
und mit der verminderten Tageszahl umrechnen.

 Dim totaldays As Integer = 1155
 Dim years As Integer = totaldays \ 360 
 totaldays = totaldays - years * 5
 years = totaldays \ 360  'Zinsjahr
 Dim months As Integer = (totaldays - years * 360) \ 30
 Dim weeks As Integer = (totaldays - years * 360 - months * 30) \ 7
 Dim days As Integer = totaldays - years * 360 - months * 30 - weeks * 7
Die Zahl der Tage würde ich bei der Anzeige weglassen.

Beitrag wurde zuletzt am 16.04.24 um 14:15:13 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datum Zeitspanne rechnen 
Autor: Erichbru
Datum: 16.04.24 17:45

Super nun verstehe ich das auch so langsam

jetzt probier ich wie ich das in meine Anwendung reinpacke

das ist bei soviel Input auch kein Thema mehr, habe da schon eine Idee die passt bestimmt

Danke euch
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datum Zeitspanne rechnen 
Autor: Erichbru
Datum: 17.04.24 15:52

das Ergebnis verstehe ich noch nicht, warum sind 10 Monate 0 Wochen

wäre sehr Nett wenn mir das noch mal deutlich gemacht wird

  Dim totaldays As Integer = DateDiff("d", d1, d2)
 
        Dim years As Integer = totaldays \ 360  'Zinsjahr
        totaldays = totaldays - years * 5
        Dim months As Integer = (totaldays - years * 360) \ 30
        Dim weeks As Integer = (totaldays - years * 360 - months * 30) / 7
        Dim days As Integer = totaldays - years * 360 - months * 30 - weeks * 7
 
        Dim ts As TimeSpan = d2 - d1 'Differenz
        Dim sb As New System.Text.StringBuilder
 
        sb.AppendFormat("Status: {0:f} - {1:f}", d1, d2)
        sb.AppendLine()
        sb.AppendLine()
        sb.AppendFormat("Länge in Tagen: {0} Tage", totaldays)
        sb.AppendLine()
        sb.AppendFormat("Länge in Wochen: {0} ", weeks)
        sb.AppendLine()
        sb.AppendFormat("Oder: {0} Monate und {1} Tage", months, days)
        sb.AppendLine()
        sb.AppendLine()
        sb.AppendFormat("Oder: {0} Jahre |{1} Monate | {2} Wochen", years, _
          months, weeks)
        sb.AppendLine()
        sb.AppendFormat("Zeitraum: {0:%d} Tage, {0:%h} Stunden und {0:%m}" & _
          "Minuten", ts)
        sb.AppendLine()
        If years = 0 Then
            sb.AppendLine()
            sb.AppendLine()
            sb.AppendFormat("letzte Eingabe vor: {0} Monaten ", months)
        End If
        '----------------------------------------------------------------------
        MessageBox.Show(sb.ToString, "Ablesedaten-Eingabe-Status", _
          MessageBoxButtons.OK, MessageBoxIcon.Information)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datum Zeitspanne rechnen 
Autor: Manfred X
Datum: 17.04.24 18:30

Hallo!

Du verstehst irgendwie nicht, was eine Divison ist.

Wenn Du den gesamten Zeitraum (in Tagen) als eine Zahl
von Wochen darstellen willst, dann musst Du totaldays \ 7 rechnen.
Die Resttage sind dann durch totaldays MOD 7 gegeben.
Oder durch: totaldays - weeks * 7

Mein Code prüft zunächst, wievele (standardisierte) Jahre sind es. \360
Der verbliebene Rest der Tage wird ausgedrückt in einer Zahl von (standardisierten) Monaten. \30
Der wiederum verbliebene Rest wird ausgedrückt in einer Zahl von Wochen. \7

Der Gesamzeitraum besteht aus: x Jahren + y Monaten + z Wochen (+Resttage, ungenau)

Das ist eine Gliederung, um den Zeitraum vieler Tage für den Benutzer möglichst
anschaulich zu machen.

Beitrag wurde zuletzt am 17.04.24 um 18:36:16 editiert.
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-2024 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