zukünftiges datum mit PHP ermitteln
ToshiOzumi
- php
0 der Häufer0 Jens Holzkämper0 ToshiOzumi1 Tom0 Kieselnator0 ToshiOzumi0 Tom
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
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
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.
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
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
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
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
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
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
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> </td><td> </td><td> </td><td> </td><td> </td>');
echo ('</tr>');
echo ('<tr>
<td>2</td>
<td>'.$bauz[gewerbe].'</td>
<td> </td>
<td> </td>
<td>'.$bauz[dauer].'</td>
<td> '.date_mysql2german($bauz[begin]).' </td>
<td> '.date_mysql2german($bauz[ende]).' </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
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
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