Hey Vegeta,
ich versuche mal, deine Fragen zu klären. Wichtig erscheint mir, dass du verstehst, wie OOo intern Datumsformate abspeichert.
Alle Datums- und Zeitwerte werden intern als Double-Wert gespeichert, wobei die Zahl vor dem Dezimaltrenner die Anzahl der Tage seit dem 30.12.1899 darstellt, die Zahl nach dem Dezimaltrenner die Zeitinformation enthält (0,5 entspricht somit 12 Stunden).
Aus diesen Werten lassen sich nun alle Möglichkeiten berechnen.
Eine direkte Möglichkeit (Funktion), die Kalenderwoche zu berechnen, gibt es meines Wissens nicht. Hier musst du selbst programmieren. Dies gilt auch für die andern Werte, wobei dies ja nicht so kompliziert ist:
1 Jahr hat 365 Tage (Schaltjahre 366), ein Monat hat 30, 31 oder 28/29 Tage,
ein Jahr hat 52 Wochen ... und so weiter.
Wenn Du also 700 als Differnez heraus bekommen hast, so nimmst du zunächst die Jahre : Jahre = 700 \ 365 Ergebnis 1
Dann die Resttage: Resttage = 700 Mod 365 Ergebnis 335
ja und so geht es dann weiter. Muss du halt noch die Ausnahmen berücksichtigen.
Nun musst du noch wissen, dass OOo versucht, bei Anzeigen (msgbox oder print) sowie bei mathematischen Operationen selbständig zu erkennen, was gewünscht wird und somit date-Variable als (lokalisierten) Datumsstring ausgibt.
Daher funktioniert auch dein Code MyDate1="25.05.2005" , der eigentlich heissen müsste: MyDate = CDate("25.05.2005") - die Funktion CDate wandelt einen Ausdruck in ein Date-Format um. Das wäre die korrekte Schreibweise, OOo Basic macht aber in deinem Fall das gleiche.
Wenn du jetzt zu dem Date eine 1 hinzuzählst, wandelt OOo die 1 ebenfalls in ein Datumsformat um und das Ergebnis ist ein Datum. Ziehst du es aber ab, interpretiert OOo die 1 jetzt als Integer und wandelt das Dateformat ebenfalls in ein Integer-Format um, und genau das zeigt dir "print" oder "msgbox" jetzt an.
Hier hilft einfach nur exakter Programmierstil:
Durch cdate() wird der Ausdruck immer in ein Datum verwandelt - und dann passt es. Oder du definierst vorher eine zusätzliche Variable :
Code: Alles auswählen
dim dZeitdif as date
dZeitdif = 1 ' ein Tag
print cdate( MyDate1 - dZeitdif)
Eine letzte Möglichkeit zur Überlistung des Automatismusses gibt es auch noch:
führt ebenfalls zum Ergebnis 24.05.2005. Hier behält der interne Interpreter das Format aus MyDate1 bei (durch das Pluszeichen) , da aber das negative Vorzeichen eine höhere Priorität besitzt, wird ein Tag abgezogen
So viel für heute,
Gruss
Thomas