ToshiOzumi: zukünftiges datum mit PHP ermitteln

Hallo,

Ich habe eine blöde/einfache Frage, aber irgendwie komme ich nicht weiter.

Problem ist ich würde gerne zu einem Startdatum(Das gibt der User in einem Formular ein.) eine festgelegte Tagesanzahl(Dauer) dazu addieren und das  ermittelte Datum mit Tagesnamen ausgeben bzw. wieder ins SQL speichern. Das es mit JavaScript verhältnismäßig einfach geht weis ich, da geht das speichern in eine SQL Tabelle nicht so gut.:)

Grüsse

Toshi

  1. strtotime
    die User Contributed Notes lesen,

    zb. +7days

    gruß

  2. Tach,

    Problem ist ich würde gerne zu einem Startdatum(Das gibt der User in einem Formular ein.) eine festgelegte Tagesanzahl(Dauer) dazu addieren und das  ermittelte Datum mit Tagesnamen ausgeben bzw. wieder ins SQL speichern.

    http://www.php.net/manual/de/ref.datetime.php, hinzufügen heißt auf englisch add; rate wie die Funktion heißt.

    mfg
    Woodfighter

  3. Tach

    @Jens Holzkämper

    http://www.php.net/manual/de/ref.datetime.php, hinzufügen heißt auf englisch add; rate wie die Funktion heißt.

    ich vermute mal du meinst date_add

    @Häufer
    die Funktion strtotime ist mir noch schleierhaft aber es gibt ja noch viel zu lesen.

    Danke euch beiden für Denkansatz.

  4. Hello,

    Problem ist ich würde gerne zu einem Startdatum(Das gibt der User in einem Formular ein.) eine festgelegte Tagesanzahl(Dauer) dazu addieren und das  ermittelte Datum mit Tagesnamen ausgeben bzw. wieder ins SQL speichern. Das es mit JavaScript verhältnismäßig einfach geht weis ich, da geht das speichern in eine SQL Tabelle nicht so gut.:)

    Wenn Du es in PHP lösen willst, dann könnte Dir auch
    http://www.php.net/manual/de/function.strtotime.php
    weiterhelfen

    Oder willst Du es direkt in der Datenbank regeln?
    Das wäre intelligenter, wenn die Daten sowieso in einer Datenbank stehen und auch dorthin wieder weggeschrieben werden sollen.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hallo

      Oder willst Du es direkt in der Datenbank regeln?
      Das wäre intelligenter, wenn die Daten sowieso in einer Datenbank stehen und auch dorthin wieder weggeschrieben werden sollen.

      Ich hatte erstmal schon an PHP gedacht, aber eher nur deswegen weil ich im
      Moment keine Ahnung habe wie ich das direkt in einer Datenbank machen soll.

      Es hört sich aber schöner an wenn ich es da direkt machen könnte. Könntest Du
      mir sagen wo ich da nachlesen könnte?

      Toshi

      1. Hallo,

        Das wäre intelligenter, wenn die Daten sowieso in einer Datenbank stehen und auch dorthin wieder weggeschrieben werden sollen.

        Es hört sich aber schöner an wenn ich es da direkt machen könnte. Könntest Du
        mir sagen wo ich da nachlesen könnte?

        im Handbuch Deines Datenbankmanagementsystems. Welches das ist, hast Du uns leider nicht verraten :-(

        Im Falle von MySQL: schau Dir den Abschnitt Date and Time Functions an.

        Freundliche Grüße

        Vinzenz

        1. Hallo,

          Tut mir Lied, du hast in doppelter Hinsicht recht. Es ist MySQL.
          Den Link den du gepostet hast habe ich noch nicht geguckt, werde
           es mir morgen genauer angucken. Danke für den Tipp.

          Grüße

          Toshi

  5. Nutze dazu am besten die Unix-Zeit. Du kannst das Datum in Unix konvertieren und rekonvertieren.

    Die Unix-Zeit rufst du mit time() oder date("U") auf

    mfg Kieselnator

    1. Tach,

      Nutze dazu am besten die Unix-Zeit. Du kannst das Datum in Unix konvertieren und rekonvertieren.

      Die Unix-Zeit rufst du mit time() oder date("U") auf

      das ist kein guter Plan, Unixzeit kennt keine Tage, und jetzt komm mir nicht damit, dass ein Tag ja 86400 Sekunden hat. Das stimmt mindestens zweimal im Jahr nicht. Datumsfunktionen selbst zu implementieren ist fast immer eine schlechte Idee.

      mfg
      Woodfighter

  6. Hallo,

    erstmal danke an alle die mir geholfen haben. Ich habe das ganze in PHP
    gelöst und es funktioniert. An paar stellen gefällt mir der Skript nicht
    und ich wollte euch bitten sich das ganze anzuschauen.

    Dafür müsste ich das ganze ein wenig genauer erklären was passieren soll.
    Es wird ein Bauzeitplan werden. Der nach Eingabe des "Startdatums" die
    Zeiten bei einzelnen Posten berechnet. Ich habe eine rein folge und Dauer
    der einzelnen Posten. Das soll dann zum Schluss grafisch ausgegeben werden,
    sowie Dauer und ein paar Bezeichnungen veränderbar sein.

    Hier die Auszüge aus meinem Code

    Der Aufruf:

    echo ('<form action="Projekt.php" method="post">');  
       echo ('<p>Bitte Baubeginn festlegen<br></p>');  
       echo ('<input type="text" class="eingabefeld" name="bauzeitplanbeg" value=""   />');  
       echo ('<input type="button" class="Calendericon" onClick="');  
       echo ("c1.popup('bauzeitplanbeg');");  
       echo ('" value=""/>');  
       echo ('<input type="submit" name="startzeitfest" value="Festlegen" />');  
    echo ('</form>');
    

    Der ist ja eher uninteressant. JavaScript ist nur eine Hilfe um Datum einzutragen.

    Da wird die Berechnung aufgerufen.

    echo ('<table>');  
    if (isset($_POST['startzeitfest']) && !empty($_POST['bauzeitplanbeg']))  
    				{								  
       $bauzeitdatum = mysql_query('SELECT * FROM bauzeitplan WHERE projektnr = "'.$_SESSION[Projekt].'"');  
       $bauzeitstarttime = $_POST['bauzeitplanbeg'];  
       $bauzeitstarttime=date_german2mysql($bauzeitstarttime);  
       if ($t=mysql_num_rows($bauzeitdatum)==NULL)  
       {	  
         include("../Gemeinsame/array.txt");  
         for ($i=0; $arr[$i]['gewerbe']!="Ende"; $i++)  
         {									  
           $s='INSERT INTO bauzeitplan (projektnr, gewerbe, dauer, vorheriger, nachfolgender) VALUES ("'.$_SESSION[Projekt].'", "'.$arr[$i]['gewerbe'].'", '.$arr[$i]['dauer'].', "'.$arr[$i]['vorheriger'].'", "'.$arr[$i]['nachfolgender'].'")';  
           mysql_query($s);							  
         }  
    	$bauzeitdatum = mysql_query('SELECT * FROM bauzeitplan WHERE projektnr = "'.$_SESSION[Projekt].'"');	  
    	datumsberechnung('Tiefbau',$bauzeitstarttime);  
       }  
       datumsberechnung('Tiefbau',$bauzeitstarttime);  
    }  
    $bauzeitdatum = mysql_query('SELECT * FROM bauzeitplan WHERE projektnr = "'.$_SESSION[Projekt].'"');						  
    if (mysql_num_rows($bauzeitdatum)==NULL)  
    {								  
        echo ('<tr><td>Keine Startdatum festgelegt</td></tr>');}  
    else{  
        while ($bauz=mysql_fetch_assoc($bauzeitdatum))  
        {  
    	echo ('<tr>');  
    	echo ('<td>Nr.</td><td>'.$bauz[gewerbe].'</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>');  
    	echo ('</tr>');  
    	echo ('<tr>  
    	  <td>2</td>  
    	  <td>'.$bauz[gewerbe].'</td>  
    	  <td>&nbsp;</td>  
    	  <td>&nbsp;</td>  
    	  <td>'.$bauz[dauer].'</td>  
    	  <td> '.date_mysql2german($bauz[begin]).'&nbsp;&nbsp;&nbsp;</td>  
    	  <td> '.date_mysql2german($bauz[ende]).'&nbsp;&nbsp;&nbsp;</td>  
           </tr>');  
        }  
    }  
    echo ('</table>');
    

    Hier sind die Functionen:

     function date_mysql2german($datum) {  
       list($jahr, $monat, $tag) = explode("-", $datum);  
       return sprintf("%02d.%02d.%04d", $tag, $monat, $jahr);  
    }  
      
    function date_german2mysql($datum) {  
       list($tag, $monat, $jahr) = explode(".", $datum);  
       return sprintf("%04d-%02d-%02d", $jahr, $monat, $tag);  
    }  
    	  
    function add_date($givendate,$day=0)  
    {  
       $cd = strtotime($givendate);  
       for ($i=0;$i<=$day;$i++)  
       {  
          $newdate = date('Y-m-d', mktime(0,0,0,date('m',$cd), date('d',$cd)+$i, date('Y',$cd)));  
    	if (date('w',mktime(0,0,0,date('m',$cd), date('d',$cd)+$i, date('Y',$cd)))==0 || date('w',mktime(0,0,0,date('m',$cd), date('d',$cd)+$i, date('Y',$cd)))==6)  
    	{$day=$day+1;}		  
       }		  
    return $newdate;  
    }  
    			  
    function datumsberechnung($was, $start)  
    {  
       $sql=mysql_fetch_array(mysql_query('SELECT * FROM bauzeitplan WHERE projektnr = "'.$_SESSION[Projekt].'" AND gewerbe = "'.$was.'"'));		  
       $t=add_date($start,$sql['dauer']);		  
       mysql_query('UPDATE bauzeitplan SET begin="'.$start.'", ende="'.$t.'" WHERE projektnr = "'.$_SESSION[Projekt].'" AND gewerbe = "'.$was.'"');  
       usleep(50000);  
       if($sql['nachfolgender']!='Ende')  
       {datumsberechnung($sql['nachfolgender'],$t);}  
    }
    

    und ein Kleiner Auszug aus der array.txt:
    <?php
    $arr = array();
    $arr[0]['gewerbe'] = "Tiefbau" ;
    $arr[0]['dauer'] = 5;
    $arr[0]['vorheriger'] = "";
    $arr[0]['nachfolgender'] = "Rohbau";

    $arr[1]['gewerbe'] = "Rohbau";
    $arr[1]['dauer'] = 28;
    $arr[1]['vorheriger'] = "Tiefbau";
    $arr[1]['nachfolgender'] = "Gerüst";
    ?>

    Also wie ich schon sagte, ich würde mich freuen ein paar
    Verbesserungsvorschläge.

    Toshi

    1. Hello,

      erstmal danke an alle die mir geholfen haben. Ich habe das ganze in PHP
      gelöst und es funktioniert. An paar stellen gefällt mir der Skript nicht
      und ich wollte euch bitten sich das ganze anzuschauen.

      Mir fällt als erstes auf, dass die Trennung von HTML-Ausgabe (Generierung und Durchführung), PHP- und Datenbankfunktionen  nicht beachtet worden ist. Das solltest Du mal versuchen. Es lohnt sich.

      siehe auch http://de.wikipedia.org/wiki/Model_View_Controller

      Und wenn Du dann auch noch das EVA-Prinzip drüberlegst über das Programmdesign, dürften deine Scripte auch noch lesbar sein, wenn sie hundertmal so groß werden...

      http://de.wikipedia.org/wiki/EVA-Prinzip

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hallo Tom,

        Ich verstehe(ein wenig)was du mit MVC meinst, da ich schon einiges an Code
        habe wird es ein wenig schwierig sein, aber versuchen könnte man es.

        Was meinst du aber mit EVA-Prinzip auf diesen Script bezogen. Ich dachte ich
        hätte es schon soweit aufgeteilt. Die Eingabe, wo das Startdatum festgelegt
        wird. Dann der Aufruf der Verarbeitung mit der Ausgabe. Die Verarbeitung
        findet dann über die Funktionen statt. Ich habe die jetzt zwar ziemlich unten
        hingeschrieben aber die stehen bei mir am Anfang des Scripts.

        Hast du über MVC noch ein Link?

        Toshi