Beitrag von Stefan Skalla (86 Beiträge) am Freitag, 11.Mai.2001, 16:53.
@Christoph - Datumsproblem
Es hilft alles nichts, ich brauche einfach diese Funktionalität, zu einem in einer Variable $date gespeicherten Datum etwas dazu addieren zu können. In meinem Fall sind es Stunden, die dazu gerechnet werden sollen, es könnten aber bei anderen Anwendungen (Kalender etc.) auch Tage oder Jahre sein; funktionieren tut es für keinen der Fälle.
Also die unten dargestellte Syntax out datum($date,"+$zeitzone:00") kann ja nicht funktionieren, da anscheinend der Teil nach dem Komma immer als Formatdefinition für die Datumsausgabe interpretiert wird. out datum($date+$zeitzone) funktioniert auch nicht, egal in welche Form ich den Inhalt der Variable $zeitzone bringe - eigentlich habe ich alle Varianten durchprobiert. Wahrscheinlich kann sowas überhaupt nicht klappen, da ja alle Datumsangaben als Text abgelegt sind; da macht das + Zeichen wohl keinen Sinn.
Wie macht man es also? Ich hab keine Ahnung. Egal, wie ich versuche, die beiden Teile zu verknüpfen, es kommt nur Nonsens dabei heraus.
Gibt es denn eine Möglichkeit, ein Datum wieder in die Zahl der Sekunden seit 1.1.1970 zurückzurechnen (möglichst ohne riesigen Formelaufwand)? Die Frage gab's hier schon mal, eine Lösung aber nicht. Sowas wie "timelocal" wäre toll...
Mag sein, dass das gesamte Problem als nebensächlich erscheint - aber sobal man sich mit seiner Website in etwas internationalere Gefilde bewegen möchte (was ich gerne erreichen würde), bekommt es Bedeutung. Ein User in USA würde sich wohl wundern, wenn er z.B. abends etwas in meine Datenbank schreibt und feststellt, dass das Datum vom nächsten Tag erscheint. Beim japanischen User wäre der Tag schon 7 Stunden alt und trotzdem erscheinen seine Postings noch mit dem Datum von gestern... (abgespeichert wird's ja auch so, aber wenigstens den registrierten Usern will ich's richtig ANZEIGEN). Kurz gesagt: HELP, PLEASE!
Antworten
Beitrag von Sander (8133 Beiträge) am Freitag, 11.Mai.2001, 17:39.
Re: @Christoph - Datumsproblem
Ich würde da vorschlagen das Datum auseinander zu nehmen wie es Ruben gemacht hat.
$datumsrest=datum($date,"Tag.Monat.Jahr");
$datumstunde=datum($date,"Stunde");
$datumminute=datum($date,"Minute");
$datumstunde=$datumstunde+$zeitzone;
out "$datumrest $datumstunde:$datumminute";
Sander
Antworten
Beitrag von Stefan Skalla (86 Beiträge) am Samstag, 12.Mai.2001, 00:56.
Re: @Christoph - Datumsproblem
Ja, da hab ich auch schon dran gedacht. Was ist aber, wenn durch Addition die 24h überschritten werden? Baseportal stört sich überhaupt nicht daran, als Uhrzeit 27:45 Uhr auszugeben... In diesem Fall muss also der Tag um 1 erhöht werden. Wenn ich den Tag um 1 erhöhe, kann es natürlich sein, dass dadurch der Monat nicht mehr stimmt. Baseportal hat auch mit dem 32. August kein Problem... Also muss auch der Monat um 1 erhöht werden. Dadurch wiederum könnte natürlich auch das Jahr beeinflusst werden, wenn sich das alles gerade am 31. Dezember abspielt.
Okay, das lässt sich natürlich alles programmieren. Wenn alles nichts hilft, mache ich das auch so. Aber irgendwie erscheint mir das doch als extrem aufwendig - im Vergleich zu dem, was man erreichen möchte. Ich fände es sinnvoller, wenn man dazu einfach auf die Systemfunktion zurückgreifen könnte. Was hier fehlt, ist einfach eine Umkehrfunktion zu datum($ganzvieleSekunden). Dann könnte man aus der Zeichenkette $date wieder eine Zahl machen, mit der sich rechnen lässt.
Antworten
Beitrag von Sander (8133 Beiträge) am Samstag, 12.Mai.2001, 01:04.
Re: @Christoph - Datumsproblem
Frag mal bei fb nach, er hat schon mal die sekunden rausgelöst - das heißt einen fertigen Workaround
Sander
Antworten
Beitrag von Stefan Skalla (86 Beiträge) am Samstag, 12.Mai.2001, 23:50.
Re: @Christoph@fb - Datumsproblem
Hi fb! Das hast Du jetzt davon! Sander hat Dich verraten. Hast Du wirklich eine Routine auf Lager, die mir die Sekunden ab 1.1.1970 errechnet? Das wäre toll. Dann muss ich das Rad nicht noch einmal neu erfinden... Kannst Du mir helfen?
Gruß,
Stefan
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Samstag, 12.Mai.2001, 23:56.
Re: @Christoph@fb - Datumsproblem: $date+Tage,Stunden:Minuten.Sekunden möglich!!
Nee, nee, so gehts ja nicht, ich bau hier mühsam die von Dir gewünschte Funktion ein und dann willst Du mit einer Funktion von fb abtrünnig werden! ts, ts, ts... ;-)
Also, es geht jetzt auf jeden Fall folgendes:
$neu=datum("$alt+10:00", "lang");
Rechnet zu $alt 10 Stunden dazu... $alt muss im internen Format vorliegen, was es automatisch tut, wenn Du es per get/get_next geholt hast... In einem "loop" musst Du $_raw{Feldname} verwenden, z.b. so:
<loop code=perl>
out "Datum=$Datum + 5 Tage, 3 Stunden, 12 Minuten und 23 Sekunden --> ",datum("$_raw{Datum}+5,03:12.12", "lang"),"<br>";
</loop>
Klar? Hoffe doch ;-)
Antworten
Beitrag von fb (406 Beiträge) am Sonntag, 13.Mai.2001, 02:31.
Re: @Christoph@fb - Datumsproblem: $date+Tage,Stunden:Minuten.Sekunden möglich!!
Rutine?
Ja hatte ich mal. Hab aber gerade die ganze Platte bei mir durchsucht- hab ich nicht mer.
Danke Christoph brauch jetzt nicht mer zu rekonstruieren :-)
War ja damals wegen der Hilfe und das Prob haben wir ja dann auch anders gelöst.
Na ich hoffe jetzt werden mal wenigen Probs zum Datum hier stehen :-) Aber vielleicht dann doch irgentwann mal ausgaben als Epochen-Sekunden?
Schlaft alle gut, bin ja mal wieder der letzte.
FB
Antworten
Beitrag von Stefan Skalla (86 Beiträge) am Sonntag, 13.Mai.2001, 07:01.
Re: @Christoph@fb - Datumsproblem: $date+Tage,Stunden:Minuten.Sekunden möglich!!
Ich bin begeistert. Ja, ja, ich weiß: "Unmögliches machst Du sofort, Wunder dauern etwas länger..."
Nochmal vielen Dank für die Mühe und die schnelle Hilfe.
Schönes Wochenende noch,
Ciao,
Stefan
Antworten
Beitrag von Ruben (403 Beiträge) am Sonntag, 13.Mai.2001, 21:27.
Re: @Christoph@fb - Datumsproblem: $date+Tage,Stunden:Minuten.Sekunden möglich!!
Hallo,
und warum progge ich tagelang, und du machst das mit einem Wisch *fg* ;-)
Schön,daß es jetzt so einfach mit Datumsdifferenzen geht. Das macht dann einen Großteil meines schönen include-Templates i_pl_wochrech unnötig - ein paar interessante Features sind aber doch noch vorhanden. So wird jetzt der Tag des Jahres errechnet und die aktuelle Kalenderwoche (sogar Schaltjahr wird beachtet ;-), mach das mal nächste Woche so, daß alles unnötige rauskommt und dann eine auf den Stand von bp angepaßte Version in der bib steht.
Nochmal: sehr schön, die eingebaute Datums-Differenzfunktion - macht vieles einfacher.
Geht das auch in Abfragen so einfach - das wäre dann ja echt toll (haben wohl genug Leute unterdessen gelöchert mit dem Datum? *gg*).
Cu
Ruben
Antworten
Beitrag von Stefan Skalla (86 Beiträge) am Montag, 14.Mai.2001, 09:12.
Re: @Christoph@fb - Datumsproblem: $date+Tage,...möglich!! ZU FRÜH GEFREUT!
Hi Christoph,
die Funktion hat noch einen Schönheitsfehler: Zwar funktioniert jetzt die Addition, aber die Subtraktion geht nicht. Sowohl datum("$date-$zeitzone:00") als auch datum("$date+$zeitzone:00") mit einem negativen Wert für $zeitzone liefern als Ergebnis immer nur $date. Lässt sich das noch einbauen?
Gruß,
Stefan
Antworten
Beitrag von Ruben (403 Beiträge) am Montag, 14.Mai.2001, 09:58.
Re: @Christoph@fb - Datumsproblem: $date+Tage,...möglich!! ZU FRÜH GEFREUT!
Antworten
Beitrag von Stefan Skalla (86 Beiträge) am Montag, 14.Mai.2001, 10:35.
Re: @Christoph@fb - Datumsproblem: $date+Tage,...möglich!! ZU FRÜH GEFREUT!
Ja, stimmt: Wenn man "jetzt" verwendet, klappt's. Wenn ich ein anderes $date anstelle von "jetzt" nehme, funktioniert's nur bei positiven Werten.
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Montag, 14.Mai.2001, 11:49.
Re: Datumsproblem: $date+Tage... ZU FRÜH GEFREUT!
Naja, wär ja merkwürdig, wenn alles auf Anhieb geklappt hätte ;-)
Schau ich mir gleich mal an...
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Montag, 14.Mai.2001, 12:19.
Re: $date-Tage,...geht jetzt... +/- in Abfragen auch...
äh, steht eigentlich schon alles im titel... ;-)
Ruben: Hab das mit dem +/- grade mal in Abfragen getestet, das ging von alleine ;-) also sowas:
...
</loop>
holt alles < 8.7.2000...
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Montag, 14.Mai.2001, 11:48.
Re: @Christoph@fb - Datumsproblem: $date+Tage,Stunden:Minuten.Sekunden möglich!!
Gut, jetzt kann ichs ja zugeben: Die Datumsroutine ist schon von Anfang an mit allem komplett - ich habe mir nur gedacht, wenn ich da ein paar Sachen weglasse, ist man dazu gezwungen, das selbst zu programmieren und nur so lernt man ja was... ;-))
Nö, also das mit dem Datum hat sich während der Arbeit als extrem umfangreich rausgestellt, mir war das vorher garnicht bewusst. Ich denke es wird noch ein paar bp-Versionen brauchen, bis da wirklich alles drin ist, was man braucht... (Jaja, wann stellen wir endlich auf Sternzeit um oder wie wärs mit der grossen Zeitreform: 1 Minute=100 Sekunden, 1 Stunde=100 Minuten, 1 Tag=10 Stunden, JEDER Monat=30 Tage und 1 Jahr=300 Tage - oder so ähnlich... (Von mir aus auch alles auf der Basis 10, also 1 Minute=10 Sekunden, etc.) Dann müsste man nur noch die Dauer einer Sekunde entsprechend anpassen, dass es mit unserem Sonnenjahr aufgeht...)
Äh, so, genug geträumt... Bis es soweit ist (also mit der Zeitreform), sollten wir vielleicht mal alles sammeln, was man in Bezug auf Datum benötigt (aktuelle Woche, von nächstem bis übernächstem Monat etc.)- Du hast da bestimmt den besten Überblick, Ruben... ;-)
In Abfragen: Jups, macht Sinn, mal sehen wie gross der Aufwand ist...
Antworten
Beitrag von fb (406 Beiträge) am Montag, 14.Mai.2001, 14:24.
Re: @Christoph@fb - Datumsproblem: $date+Tage,Stunden:Minuten.Sekunden möglich!!
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Montag, 14.Mai.2001, 23:48.
Re: @Christoph@fb - Datumsproblem: $date+Tage,Stunden:Minuten.Sekunden möglich!!
Als ich mit dem Datumsfeld anfing hab ich mir lange überlegt, wie ich es am sinnvollsten intern speichere und natürlich war "Sekunden seit 1.1.1970" die erste Idee - bis mir dann irgendwann auffiel, dass man damit ja noch nichtmal Geburtsdaten speichern kann (zumindest die der über 30-jährigen nicht ;-) ).
Deshalb also das interne Format 2000.01.01,12:23,47 - damit ist einfach alles möglich, auch historische Daten... Schien mir sinnvoller...
Klar, kann man mit Sekunden gut rechnen, aber das hat Grenzen, z.B. wenn man + 1 Monat machen will -> Wieviel Sekunden hat ein Monat? Kommt natürlich auf den Monat an und da wirds dann wieder unbequem... Deshalb sollte baseportal einfach alles was mit Datum zu tun hat so bequem wie möglich bereitstellen und es ist ja auch schon weit gediegen... Irgendwann brauchts die Sekunden seit 1.1.970 dann einfach nicht mehr - denn dafür gibts im realen Leben einfach keine Notwendigtkeit ;-)
Antworten
Beitrag von fb (406 Beiträge) am Dienstag, 15.Mai.2001, 01:36.
Re: @Christoph@fb - Datumsproblem:Noch ein Traum :-)
Hallo Christoph,
mal zum sammeln, ein absoluter Traum währe es wenn sowas geht:
$Zeit=datum("$Ende_datum-$Start_datum")
und dann in $Zeit die diverenz in Monaten,tagen,jahren,stunden,minuten und secunden stehen.
Was aber wenn zwischen Start und Ende nur 5 minuten vergangen sind???
Eigentlich ist Deine Idee mit dem Internen Format ja gut, Datum und Zeit durch , getrennt mmm
Hab jetzt zwei Tage einige stunden damit verbracht rumzuprobieren mit Monatstagen und schaltjahren usw. ist eben wirklich ein Komplexes Tema :-(
Das vergleichen ist dabei ja ein leichtes aber Zeiträume zu ermitteln , Tja da hörts dann auch schon auf :-(
Hatte eigentlich vor ne art sub zu schreiben die eben sowas kann, ist aber nur ne sub geworden die ne Datumszahl generiert mit der man vergleichen und rechnen kann. Problem ist immer das wieder umformen in ein datum oder eben in eine Differenz die dann kein Datum (wie bei Dir mit - ) sondern Zeitraum rausschmeisst mmm
Ich weis nicht ob ich hier und da nen Ansatz habe der Dir weiterhelfen könnte.
Steht bei schick (Termine) ist aber inzwischen wohl ein wirrwar aber wer weiss.
FB
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Dienstag, 15.Mai.2001, 15:09.
Re: @Christoph@fb - Datumsproblem:Noch ein Traum :-)
Äh, na gut, dann erfüllen wir mal Deinen Traum ;-)
Soll heissen: Naja, zumindest mit Tagen,Stunden,Minuten und Sekunden sollte das gehen, was Du Dir erträumst ;-)
Antworten