Adition zu einem Datum

xthetronx

Erfahrenes Mitglied
Mahlzeit,

ich möchte gerne zu einem Datum 7 Tage hinzuadieren und habe bisher folgendes.

$callSchliessen = date("d.m.Y");

$call = $callSchliessen;
$callDat = explode('.', $call);
$mysqlCall = strftime('%Y-%m-%d', mktime(0,0,0,$callDat[1],$callDat[0]+7,$callDat[2]));

Jetzt ist allerdings die Sache die, dass ich dieses Script am Anfang der Seite habe und im Textfeld z.b. 04.01.2004 stehen soll, ich dieses jetzt aber schon für timestap umgewandelt habe, um es in die DB (int) einzugeben.
So wie ich es jetzt habe müsste ich es ja wieder mit date() umwandeln, nur um es im Textfeld in tt.mm.jjjj anzuzeigen.

Sicherlich ein bisschen umständlich.
Gibt es da eine bessere Lösung?

Zudem habe ich jetzt dass Forum durchsucht und es scheint, als ob es besser ist Datum in der DB als INT und mit Timestemp zu speichern.

Ich brauche die Datumsangaben aber später noch zum rechnen. Ist dass dann egal oder bietet DATE von mysql wieder Vorteile?

Vielen Dank

Torsten
 
Nun was besser ist ob Date oder die PHP Timestamp darüber lässt sich trefflich streiten :-)

Grob gesagt der Unterschied ist der Berechnungsort.
Berechnest du das Datum lieber in PHP dann nimmst du PHP Timestamp
soll Mysql rechnen dann ist DATE das richtige :-)

und ja wenn du mit PHP Timestamp arbeites dann muss das Feld ein Integer sein
denn Mysql Timestamp ist was völlig anderes wie die PHP Version :-)

zu deinem Problem:
7 tage = 7 * 24 stunden * 60 Minuten * 60 Sekunden = 604800

also einfach zu deinem PHP Timestamp der wert 604800 addieren :-)
 
Ich stimme melmager voll zu, nur hier damit da nicht stunden dran sizt:

PHP:
<?
  $dazu = 60 * 60 * 24 * 7; // Eine Woche dazu packen.
  $timestamp_new = $timestamp + $dazu; // Der neue Timestamp in einer Woche wird gemacht
  $datum = date("d.m.Y", $timestamp_new); // Datum erstellen
  echo $datum; //datum ausgeben
?>

Wenn du das Datum in form von 04.01.2004 vorliegen hast, dann ändere diese Zeile:
PHP:
  $timestamp = time(); // Der aktuelle Timestamp
Durch:
PHP:
$datum = "03.01.2004";
$werte = explode(".",$datum);
$timestamp = mktime(0, 0, 0, $werte["1"], $werte["0"], $werte["2"]));

Das ist nicht getestet musst einfach mal testen.

Gruß
 
Danke für eure Vorschläge.

Ich habe es jetzt so gelöst:

$heute = date("d.m.Y");

/* CallSchliessen Datum in Timestamp */
$NeuDatum = $heute;
$datu = explode('.', $NeuDatum);
$CallEnde = mktime (0, 0, 0, $datu[1],$datu[0]+7 ,$datu[2]);

$CallSchliessen = date("j.m.Y", $CallEnde); /* Das kommt in ein 'hidden' Feld.

ABER jetzt habe ich natürlich das nächste Problem.

Ich will nicht einfach die nächsten 7 Tage drauf rechnen, sondern nur die Arbeitstagen, also Montag bis Freitag.
Kommt also ein Wochenende, soll dieses nicht mitberechnet werden, sondern 2 Tage nach hinten geschoben werden.

Wisst ihr vielleicht wie man sowas realisieren könnte?

Vielen Dank

Torsten
 
Deine Lösung ist nicht so die beste!
Stell dir vor es ist der 29. März und dann nimm mal 7 Tage dazu das ist dann der 5. Mai. Bei deiner Rechnug ist es aber der 36. März(Also ich kenn den nicht), ich weiß net ob das zu einem Fehler führt aber ich würd ihn leiber vorher ausschließen.

Nun nochmal zu deine Werktagen.
Kannst du mit ner Schleife lösen:
Immer einen Tag weiter gehen. Un mit date("D",$timestamp_new) gucken was da raus kommt. Wenn Sun oder Sat rauskommt, keinen Tag von der Gesammtzahl der Tage abziehen wenn ja einen abzeihen. Wenn dann die Gesammtzahl auf 0 steht aufhöhren und du hast deinen Tag.

Gruß
 
Danke DarkBart dass Du mich auf die Schwäche in meinem Code aufmerksam gemacht hast.

Habe es jetzt nach den obigen Angaben geändert und werde mich mal an der Schleife versuchen.

Falls ich scheitern sollte werden wir uns wohl wieder in diesem Threat sehen:-)

Torsten
 
So, ich habe Deinen Hinweis jetzt in eine Schleife gepackt und es scheint jetzt auch zu funktionieren.

Code wie folgt.

PHP:
$timestamp = time(); // aktuelle Zeit wird geholt.

$dazu = 60 * 60 * 24; // ein Tag 
$timestamp = $timestamp - $dazu; // Der neue Timestamp wird einen Tag zurück gesetzt. Dies ist notwendig, 
//da ich in der for Schleife direkt beim ersten Mal einen Tag $dazu2 hinzurechne. Ich möchte aber den aktuellen Tag.

for($i=1;$i<7;$i++){
$dazu2 = 60 * 60 * 24; // ein Tag hinzugerechnet
	if((date("w",$timestamp)==6)||(date("w",$timestamp)==0)){//wenn Samstag o. Sonntag
		$i--; // $i um 1 erniedrigen
	}
	$timestamp = $timestamp + $dazu2; // einen Tag auf $timestamp adieren
}

$datum_neu = date("l,d.m.Y", $timestamp);
print("$timestamp "); // in Sekunden
print("$datum_neu") // in tt.mm.jjjj;

Hab´s etwas auskommentiert, damit, sofern es richtig ist, andere mit ähnlichen Problemen es leichter nachvollziehen können.

By the way muss ich mal ein riesen Lob an das Board loswerden!
Bin bisher immer auf nette, bemühte und kompetente Hilfe gestossen und das zudem noch schnell!

So, nu´aber gute Nacht

Gruß

Torsten
 
Zurück