Ein bestimmtes Datum liegt als Variable vor - wie kann ich in PHP mir dieses Datum minus drei Tage in eine (andere) Variable schreiben lassen?
Die unterschiedlichen Monatslängen etc. sollten natürlich berücksichtigt werden…ich habe mal irgendwo etwas von „strtotime“ gelesen, aber eine wirklich funktionierende PHP-Umsetzung für IPS nirgends ausmachen können.
lässt sich eigentlich gut rechnen, die frage ist wo kommt deine Variable mit Datum her und wie ist sie formatiert?
bei „20.11.2009“ müßte man sie erst zerlegen und dann zum Timestamp zusammensetzten.
Zusammensetzten würde so gehen:
mktime(0, 0, 0, 11, 20, 2009)
Hier noch ein kleines Beispiel:
<?
$time = mktime(0, 0, 0, 11, 20, 2009); // Datum in Timestamp Umwandeln.
echo $time." ";
$time2 = $time - 259200 ; // Datum - 259200 Sec. = 3 Tage.
echo $time2." ";
$datum = date("d.m.Y",$time2); // Timestamp in Datum umwandeln.
echo $datum." ";
?>
Änderung-------
Hab mir gerade den strtotime Befehl angesehen, damit kannst du das Datum in den Timestamp umwandeln.
Dann sieht es so aus:
<?
$datum = "20.11.2009";
$time = strtotime($datum);
$time2 = $time - 259200 ; // Datum - 259200 Sec. = 3 Tage.
$datum_neu = date("d.m.Y",$time2); // Timestamp in Datum umwandeln.
echo $datum_neu." ";
?>
Das Rechnen mit Sekunden sorgt z.B. bei Sommer-/Winterzeitumstellung für Probleme (siehe Hinweis unter PHP: date - Manual). Daher sollte man PHP: mktime - Manual verwenden.
Angepasst wäre das letzte Beispiel dann:
<?php
$datum = "20.11.2009";
$time = strtotime($datum);
$time2 = mktime(date("H", $time), date("i", $time), date("s", $time), date("n", $time), date("j", $time)-3, date("Y", $time)); // Datum -3 Tage
$datum_neu = date("d.m.Y", $time2); // Timestamp in Datum umwandeln.
echo $datum_neu." ";
?>
ich frage mich ob das so einfach geht?
Probiert hab ich es noch nicht.
Aber was währe z.B. am 02.12.2009, du nimmst ja den Timestamp splittest ihn auf und machs mit mktime einen neuen, wenn du jetzt 02 - 3 Tage rechnest würde zwar 29 bei raus kommen, aber beim monat würde sich doch nicht ändern?
Datum 02.12.2009
$time2 = mktime(date("H", $time), date("i", $time), date("s", $time), date("n", $time), date("j", $time)-3, date("Y", $time)); // Datum -3 Tage
Übersetzt würde es doch dann so aussehen:
$time2 = mktime(00, 00, 00, 12, 29, 2009); // Datum -3 Tage
Negative Werte rechnet mktime korrekt um. Ist zwar nicht direkt in der Doku beschrieben, aber ein Beispiel dort hat -31 Tage drin. Die Variante von sysrun ist natürlich auch schön und kürzer.
Im Script unten werte ich im oberen Teil aus, ob heute jemand Geburtstag hat - das funktioniert auch superklasse!
Problem: ich möchte mir in eine separate Stringvariable schreiben, wer als nächstes Geburtstag hat - mitsamt der Differenz in Tagen. Ein Codeschnipsel habe ich im unteren Teil, dieser gibt z.B. die Differenz in Tagen zu einem Referenzdatum aus…aber wie kann ich das obere Array so auswerten, dass mir der nächste anstehende Geburtstag z.B. in der Form „Noch 4 Tage: Herbert“ ausgegeben wird?
Das Array mit den Geburtstagen liegt nach Datum sortiert vor (der erste Geburtstag im Januar steht also ganz oben und der letzte im Dezember an letzter Stelle des Arrays).
Man müsste wohl das Array mit dem Vergleich des aktuellen Tages durchlaufen lassen…oder vielleicht auch anders
Ich stehe aufm Schlauch und das überfordert meine PHP-Kenntnisse leider um ein Vielfaches. Ich wäre wirklich sehr dankbar wenn mir da jemand eine Lösung präsentieren könnte - die Funktion ist doch sicher auch für andere interessant.