Datum + Tage ??
Benn
- php
Hi Leute; ich steh wieder einmal auf der Leitung ... =)
ich zwar schon gesucht, aber hauptsächlich umformatierungsbefehle usw. gefunden
problem:
ich habe ein datum und möchte ganz einfach eine bestimmte anzahl von tagen hinzuzählen
mein erster gedanke war zerlegen;+tage;wieder zusammenfügen, bis mir eingefallen ist, dass somit der monat nicht angepasst wird (also, dass dan einfach das datum unbrauchbar wird weils über 31 tage geht)
wie rechnet man also am besten mit einem datum?
Hallo,
Datum in Timestamp umrechnen (wenn man ihn noch nicht hat)
Timestamp + 3600*24*x-Tage // x steht für die Anzahl von Tagen
echo date(..., timestamp)
So ist das Grundprinzip, natürlich weiß ich das dort noch etliche Fehler drin sind (z.B. beim Echo), deswegen nur als Prinzip benutzen.
MFG
Andavos
Halihallo Benn
ich habe ein datum und möchte ganz einfach eine bestimmte anzahl von tagen hinzuzählen
wie rechnet man also am besten mit einem datum?
Das einfachste ist IMHO über die Unix-Timestamp, diese kann
arithmetisch verarbeitet werden und ist zudem "Monats- und
Schaltjahrsicher".
zuerst musst du das Datum also in eine Unix-Timestamp konvertieren:
http://www.php.net/strtotime, die Konvertierung läuft analog
zu http://www.gnu.org/software/tar/manual/html_chapter/tar_7.html.
Dann kannst du mit dem Integer rechnen:
$timestamp = strtotime("2004-02-19 18:10:05");
$timestamp += 3*86400; // 3*(3600*24) = +3 Tage
und dann kannst du es zurück in ein "lesbares" Format transformieren:
dem du die $timestamp als zweiten Parameter übergibst und als ersten
dein Format schreibst.
Viele Grüsse
Philipp
thx für die schnelle und deutliche beantwortung
ich werds wohl öfter gebrauchen können :-)
Gruß
Benn
hi,
wenn du diesen link schon nennst, solltest du auch seinem inhalt beachtung schenken:
strtotime versteht durchaus parameter der form "+ 17 days" o.ä.
das ist allemal sicherer, als hier auf einen timestamp 3600*24*x draufzurechnen - weil du dabei leicht probleme bekommst, wenn du über sommer-/winterzeitumstellung hinwegrechnest.
gruss,
wahsaga
Halihallo wahsaga
strtotime versteht durchaus parameter der form "+ 17 days" o.ä.
das ist allemal sicherer, als hier auf einen timestamp 3600*24*x draufzurechnen - weil du dabei leicht probleme bekommst, wenn du über sommer-/winterzeitumstellung hinwegrechnest.
Das ist richtig. Ich ging jedoch davon aus, dass Benn bereits ein
Datum vorliegen hat (welches sich des öfteren von dem aktuellen
unterscheidet) und somit fällt dies den Bach runter. Falls jedoch
das aktuelle Datum bearbeitet werden soll, ist dies bestimmt die
bessere Variante.
Viele Grüsse
Philipp
hi,
Das ist richtig. Ich ging jedoch davon aus, dass Benn bereits ein
Datum vorliegen hat (welches sich des öfteren von dem aktuellen
unterscheidet) und somit fällt dies den Bach runter.
nein, wieso?
strtotime kann als zweiten parameter einen beliebigen timestamp bekommen. nur, wenn du diesen zweiten parameter ganz weglässt, wird automatisch das aktuelle datum hergenommen.
die berechnung "+17 days" (_erster_ parameter der funktion) funktioniert aber in beiden fällen.
gruss,
wahsaga
Halihallo wahsaga
strtotime kann als zweiten parameter einen beliebigen timestamp bekommen. nur, wenn du diesen zweiten parameter ganz weglässt, wird automatisch das aktuelle datum hergenommen.
die berechnung "+17 days" (_erster_ parameter der funktion) funktioniert aber in beiden fällen.
wahsaga, Du hast natürlich recht. Keine Ahnung, warum ich da einen
Stuss zusammengeschrieben habe... Das man mal etwas überliest kann
ja mal passieren, aber das mir diese Unlogik und Inkonsistenz in
meiner Annahme (dass strtotime keine Timestamp entgegennimmt) nicht
aufgefallen ist (sogar über mehrere Postings hinweg!), beunruhigt
mich. Danke für die Berichtigung.
Viele Grüsse
Philipp
Halihallo wahsaga
das ist allemal sicherer, als hier auf einen timestamp 3600*24*x draufzurechnen - weil du dabei leicht probleme bekommst, wenn du über sommer-/winterzeitumstellung hinwegrechnest.
BTW: Das sollte eigentlich gar kein Problem machen, denn die
Timestamp wird IMHO intern als GMT-Zeit gespeichert, welche keine
Sommer-/Winterzeit kennt. Wenn man diese GMT-Timestamp dann normal
über date formatiert, wird die lokale Zeitzone "aufgerechnet", welche
im Winter +0100 (Winterzeit) und im Sommer +0200 (Sommerzeit) ist.
Aber wie gesagt: Falls das aktuelle Datum geändert werden soll, muss
man wirklich keinen Umweg über die Timestamp machen.
Viele Grüsse
Philipp