datum bearbeiten

Blaschki

Erfahrenes Mitglied
hey

ich habe ein Datum "$day", was im format "yyyy-mm-dd" vorliegen habe.
wie kann man nun von dem datum einen tag abziehen, oder hinzuzählen?

habe auch schon im forum und bei google gesucht, aber nichts gefunden
was mir da hilft.

also es soll so sein, das wenn "$day"=2003-09-22 ist (zum Beispiel), das ich dann eben "$day_v"=2003-09-21 und "$day_n"=2003-09-23.
 
Deine Suche war vielleicht durch den Mangel an den richtigen Suchworten nicht erfolgreich ;)

http://de3.php.net/manual/de/ref.datetime.php

Die Date-Funktionen PHP liefern alles was Du brauchst.
Es gibt aber auch andere Wege das Problem zu lösen, dazu braucht man noch nicht einmal die Date Funktionen :-)

Eine Lösung wäre:
PHP:
// $day = "yyyy-mm-dd";
$day = "2003-12-24";
$arr_day = explode("-", $day)
// ergibt array("2003","12","24")
// jetzt gibt es z. B. zwei Wege
// Lösung a)
$arr_day[2] = $arr_day[2] - 1 // oder +1 / oder was auch immer
$day = implode("-", $arr_day);
echo $day;
// Problem: Geht bei Monatsumbrüchen nicht - PHP-Date Funktionen
// arbeiten nicht mit negativen Daten - is ja auch unnötig)
// dafür ist ideal: Lösung b)
$ts = mktime (0,0,0,$arr_day[0], $arr_day[2], $arr_day[1]);
// achtung: die reihenfolge der arr_day ist richtig,
// der Befehl arbeitet mit jahr, tag, monat und nicht mit jahr, monat, tag
// $ts ist jetzt ein unix timestamp (Sekunden bis jetzt vom 1.1.1970)
// jetzt braucht man nur noch sekunden abziehen oder dazuaddieren

// +1 Tag
$plusday = $ts + 86400; // 86400 sek (Sek: 60xMin: 60*Std: 24)
// - 1 Tag
$minusday = $ts - 86400;

// mit date kann man einen unix timestamp in ein formatiertes Datum umwandeln
$day_plus = date("Y-m-d", $plusday);
$day_minus = date("Y-m-d", $minusday);

echo $day_plus;
echo $day_minus;

Sehr gut zum Thema: Daten in Zukunft und Vergangenheit
http://de3.php.net/manual/de/function.date.php


So, ich hoffe das hilft jetzt :-)
Macht 150,- Euro für die Stunde :rolleyes: :p
 
Zuletzt bearbeitet:
Einfacher gehts so:

Code:
$meinDatum = "2003-09-23";
$meinNeuesDatum = strtotime("+1 day", strtotime($meinDatum));
echo date("Y-m-d", $meinNeuesDatum);

Habs getestet ... und es funktioniert. :)

Zur Erklärung ist folgendes zu sagen:
Zuerst erstellen wir eine Variable mit dem entsprechenden Datums-String. Die Methode strtotime wandelt einen Datums-String zurück in einen UNIX-Timestamp. Außerdem kann diese Methode auch noch ein bisschen rechnen. Wir erstellen also einen Timestamp, zählen einen Tag dazu und anschließend rekonvertieren wir mit der date-Methode den Timestamp zurück in einen Datums-String und geben diesen aus. Ein flotter 3-Zeiler, quasi.

Es geht auch mit einer Zeile:
Code:
echo date("Y-m-d", strtotime("+1 day", strtotime("2003-09-23"));

In jedem Fall kommt als Ergebnis 2003-09-24 raus. :)

Have fun ...

MfG
Mike
 
@Neurodeamon:

Danke dein teil , bis auf eine Stelle, aber sehe selbst ich hab mal kurz was in dem code umgeschrieben.

PHP:
//$day ist schon da
$arr_day = explode("-", $day);
$ts = mktime (0,0,0,$arr_day[1], $arr_day[2], $arr_day[0]);
// Nein der befehl arbeitet genau anders herum.
// Mit monat, tag, jahr. aber sonst hatte alles gefunzt.

$plusday = ($ts + 86400); 
$minusday = ($ts - 86400);
$day_plus = date("Y-m-d", $plusday);
$day_minus = date("Y-m-d", $minusday);
echo "<br>$day_minus\n";
echo "<br>$day_plus\n";

aber nochmal danke
 
// Nein der befehl arbeitet genau anders herum.
// Mit monat, tag, jahr. aber sonst hatte alles gefunzt.

Ups, hast recht. So meinte ich es auch. Hab mich verschrieben *schäm* ...

@Saber: Ja klar ist Deine Variante kürzer. Aber kannst Du damit auch halbe Tage hinzurechnen? ;)
 
Neurodeamon hat gesagt.:
@Saber: Ja klar ist Deine Variante kürzer. Aber kannst Du damit auch halbe Tage hinzurechnen? ;)

Ähm, okay. Aber jetzt mal eine saublöde Frage von mir:

was bringt es Dir halbe Tage auf ein Datum dazu zu rechnen! Ich habe noch nie ein Datum wie 23 1/2. August 2003 gesehen! ;)
Ohne eine Uhrzeitangabe ist es völlig überflüssig halbe Tage dazu zählen zu können.

Im übrigen geht das auch:
Code:
echo date("Y-m-d", strtotime("+12 hours", strtotime("2003-09-23")));

Wobei das Ergebnis trotzdem 2003-09-23 wird. Außer Du schreibst folgenden Code und lässt Dir zusätzlich die Uhrzeit ausgeben:
Code:
echo date("Y-m-d h:i:s", strtotime("+12 hours", strtotime("2003-09-23")));

Als Ausgabe erhältst Du dann:
2003-09-23 12:00:00

Noch eine kleine Anmerkung von mir selbst. Bei meinem ersten Eintrag fehlt jeweils eine schließende Klammer am Schluss.

Ich wünsche noch ein angenehmes Leben ... :)
 
Original geschrieben von Saber
Ähm, okay. Aber jetzt mal eine saublöde Frage von mir:

was bringt es Dir halbe Tage auf ein Datum dazu zu rechnen! Ich habe noch nie ein Datum wie 23 1/2. August 2003 gesehen! ;)
Ohne eine Uhrzeitangabe ist es völlig überflüssig halbe Tage dazu zählen zu können.

So darf man als Programmierer nicht denken, es kann immer vorkommen, dass der Kunde in einem halben Jahr auch eine Uhrzeit will, dann bist du mit Neuros Lösung besser beraten. ;) (Ok, oder mit der strtotime()-Funktione ;))
 
Original geschrieben von Johannes Röttger
So darf man als Programmierer nicht denken, es kann immer vorkommen, dass der Kunde in einem halben Jahr auch eine Uhrzeit will, dann bist du mit Neuros Lösung besser beraten. ;) (Ok, oder mit der strtotime()-Funktione ;))

Hmm, und so wie Du darf man als Projektleiter/Programmierer auch nicht denken. Versucht man immer das zu berücksichtigen, was der Kunde IRGENDWANN mal VIELLEICHT haben möchte, dann wird ein Projekt immens groß, dauert länger als geplant, sprengt wohlmöglich das Budget und das Unternehmen geht den Bach runter.

Man sollte stets das implementieren, was der Kunde zu haben wünscht, sprich: was im Vertrag steht. Natürlich sollte man beim Source Code darauf achten, dass er erweiterbar und leicht wartbar bleibt, aber er soll auch leicht lesbar sein.

Soll heissen, man soll so programmieren, dass man sich selbst keine Steine in den Weg legt, darf aber auch nicht immer schon einplanen, was der Kunde irgendwann vielleicht mal brauchen könnte, denn das ist ein ewiger Teufelskreislauf.

Und bedenke immer: der Kunde zahlt immer das, was er JETZT haben will, nicht das, was er irgendwann mal haben will! ;)

Da es da oben um ein Datum geht, habe ich auch auf die Datumsfrage geantwortet. Im übrigen glaube ich, dass eine Zeile Source Code schneller und leichter erweitert werden kann als zwanzig davon.

Im übrigen ist mein Code sowieso schnell erweiterbar:
Code:
echo date("Y-m-d h:i:s", strtotime("+1 day +1 hour +2 minutes", strtotime("2003-09-23 01:12:38")));
Und es es bleibt trotzdem immer eine Zeile. :)

Ich wünsche noch ein schönes Leben ...
 
Zuletzt bearbeitet:
Zurück