German Abstand in Tagen zwischen zwei Terminen

thewavemaster

Member
Licensed User
Hallo zusammen!
Ich bin ein absoluter B4A-Neuling (wenn auch alter VB Hase :))

Meine Frage zum Einstand: Ist es in B4A möglich durch einen einfachen Befehl den Abstand in Tagen zwischen zwei Terminen auszurechnen?

Also der User gibt eine Variable Startdatum und eine Variable EndDatum jeweils im Format dd/mm/yyyy ein. Die App berechnet dann den Abstand der Tage zwischen den zwei Terminen aus. Bin leider über die Suche nicht fündig geworden.
 

rbsoft

Active Member
Licensed User
Ja, das geht einfach!

B4X:
Dim tks, d As Long 

tks = DateTime.DateParse("06/15/2011") - DateTime.DateParse("06/05/2011")
d = tks / DateTime.TicksPerDay 
    
ToastMessageShow(d, True)

d ergibt die Anzahl der Tage, in diesem Falle 10.
 

rbsoft

Active Member
Licensed User
Hier das ganze noch mal als Funktion "DateDiff", wenn man das häufiger benötigt:


B4X:
Sub DateDiff(Date1 As String, Date2 As String)As Long
   Dim tks As Long 
   
   tks = DateTime.DateParse(Date1) - DateTime.DateParse(Date2)
   Return tks / DateTime.TicksPerDay 
End Sub

Aufruf würde dann so erfolgen:


B4X:
x = DateDiff("06/15/2011", "06/05/2011")

Rolf
 

thewavemaster

Member
Licensed User
Danke für die schnelle Antwort. Funktioniert genau so wie es soll!
Noch eine Frage nebenbei: Gibt es ein Kalendertool, oder muss ich die klassische Kalenderansicht selber programmieren?
 

specci48

Well-Known Member
Licensed User
Gibt es ein Kalendertool, oder muss ich die klassische Kalenderansicht selber programmieren?
Was meinst Du mit "Kalendertool"? Eine graphische Wochen- oder Monatsanzeige? Die gibt es leider nicht.
Oder suchst Du "nur" eine einfache Möglichkeit zur Erfassung eines Datums? Hier hilft die Dialog-Bibliothek von Agraham: Basic4android - Dialogs


Gruß
specci48
 

thewavemaster

Member
Licensed User
Also das mit dem Abstand funktioniert soweit ganz gut. Allerdings funktioniert es nicht, wenn der Abstand über einen Monat hinaus geht....

Also der abstand vom 01.02 zum 03.02 ist genauso groß wie der 01.02 zum 03.03...es kommt bei beiden das ergebnis 2 raus...

habt ihr eine idee wie auch der abstand monatsübergreifend berücksichtigt wird?
 

rbsoft

Active Member
Licensed User
Also bei kommt 29 heraus. Welches Datumformat verwendest Du denn? Ich verwende das voreingestellte amerikanische Format "mm.dd.yyyy").

Rolf
 

thewavemaster

Member
Licensed User
ich verwende das "deutsche" Datumsformat:

DateTime.DateFormat ="dd/mm/yyyy"
date2="02/01/2012"
date1= edittext1.Text
tks = DateTime.DateParse(Date1) - DateTime.DateParse(Date2)
dif= tks / DateTime.TicksPerDay
 

rbsoft

Active Member
Licensed User
Hast Du dieses Format auch eingestellt, z. B. in Activity_Create?

B4X:
DateTime.DateFormat = "dd/MM/yyyy"    'deutsches Format

Falls nicht bekommst Du falsche Ergebnisse oder Fehler, weil angenommen wird Du benutzt das amerikanische (Default) Format, also "MM/dd/yyyy".

Rolf

Nachtrag:
Ich war etwas blind und habe erst später gesehen, dass Du DateTime.DateFormat gesetzt hast, allerdings falsch. Das ist hier etwas anders, für Monat musst Du immer das grosse "M" nehmen, das kleine steht für Minuten. Nur bei VB hat man das aus irgendwelchen Gründen geändert und für Minuten das "n" genommen. Hier wird die gleiche Syntax wie in der Windows API verwendet.
 
Last edited:

pjo12345

Active Member
Licensed User
Habe gerade etwas festgestellt. Die Differenz zwischen dem 1.Januar 2012 und dem 1.April 2012 beträgt 91 Tage. Nehme ich den obigen Code erhalte ich als Ergebnis nur 90 Tage. Habe mir das dann mal genauer angeschaut und gesehen, dass die Formel für diese Rechnung 90.95833333333333 als Ergebnis bringt. Das sind ja fast 91 Tage aber eben nur fast. Konnte mich dann mit der Runden-Funktion behelfen.

Return Round(tks / DateTime.TicksPerDay)

mfg pjo12345
 
Top