kleines Script um Zeiten von verschiedenen Treffen zu berechnen

Den Teil meines Postings mit strtotime() hast du jetzt aber übersprungen, oder? ;) Rechnen mit Datumse ist aufgrund ihrer Vielfalt in der Formatierung haarig. Da stolpert eine Programmiersprache schonmal schnell.

Versuch es mal folgendermaßen:

PHP:
$dauer = strtotime($treffen[$i][1]) - strtotime($treffen[$i][0]); // Dauer in Sekunden
$dauer = $dauer / 60 / 60 / 24; // $dauer Sekunden durch 60 = Min durch 60 = Std durch 24 = Tage
 
Hallo zusammen,

das errechnen der Dauer eines Treffen klappt nun auch:
PHP:
		// Berechnung der Dauer
			$dauer = round((strtotime($treffen[$i][1]) - strtotime($treffen[$i][0])),2);
			$dauertage = $dauer / 60 / 60 / 24; // in Minuten / in Stunden / in Tage
Für die Wartezeit könnte ich theoretisch das gleiche machen:
PHP:
		// Berechnung der Wartezeit
		 $warten = round((strtotime("06.08.2011")- strtotime("13.06.2011")),2);
		 $wartentage = $warten / 60 / 60 / 24; // in Minuten / in Stunden / in Tage
Das Problem ist dabei nur, dass bei dem zweiten Wert auf den zweiten Wert (Index 1) aus dem array zuvor zugreifen müsste. Und genau da liegt im Moment das Problem, da ich das aktuelle array durch die if Schleife gewählt wurde. Wie also plötzlich auf das vorherige zurückgreifen?

Mein Ansatz ist nun, dass ich den Wert um den es geht in einer Variable speicher. Doch jene würde dann ja, wenn die Schleife wieder durchläuft, überschrieben...

Muss nun erstmal weg, danach geht es weiter.

Vielen Dank!
 
Hi,

du kannst in den eckigen Klammern ebenfalls schreiben:

PHP:
$treffen[$i-1][1]

Damit referenzierst du den vorherigen Eintrage. Vorsichtig musst du da natürlich beim ersten Eintrag sein (einen Index -1 gibt es nicht). Ansonsten wird $i in dem Fall auch nicht verändert, $i-1 wird berechnet, benutzt und wieder weggeschmissen.

Best regards
 
Hallo zusammen,

das Script klappt dank der arrays nun soweit auch. Denn es werden an einer Stelle die Treffen mit einer Bemerkung dazu geschrieben.

Den Rest erledigt dann das Script, wie unter anderem die Ausgabe der Daten in einer Tabelle und die Berechnung der Dauer von den Treffen sowie die Wartezeit zwischen den Treffen.

Das Script schaut nun so aus:
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta name="author" content="Muckel">
	<meta name="description" content="&Uuml;bersicht unserer &raquo;Zeiten&laquo; - Wie lange ist es noch? Wie lange haben wir uns gesehen? Wie lange mussten wir wieder warten?">
	<meta name="keywords" lang="de" content="Counter,Countdown,zaehlen,dauer,warten">
	<meta http-equiv="content-language" content="de">
	<meta name="robots" content="all">
	<title>&Uuml;bersicht unserer &raquo;Zeiten&laquo;</title>
	<!-- Fuer das eigentliche Script wird das Stylesheet wieder eingebunden. -->
		<!--	<link href="style.css" rel="stylesheet" type="text/css" />	-->
</head>
<body>
<?php
// Datum des ersten Kontaktes
	$kontakt = strtotime("22.09.2010 14:34:00"); // Erster Kontakt auf einer Internetseite

// Angabe der Treffen in einem Array1
	$treffen = array(
		array( '22.09.2010', '22.09.2010', 'Der erste Kontakt auf einer Internetseite.'),
		array( '27.12.2010', '08.01.2011', '&Uuml;ber Silvester 2010 auf 2011 trafen sie sich das erstemal und verstanden sich auf anhieb gut. Durch eine akute Erkrankung hat er sie in das Krankenhaus begleitet und seinen Besuch nicht Abgebrochen, sondern ging jeden Tag zu ihr und besuchte sie. Vermutlich durch diese Situation ist eine feste Beziehung zwischen den beiden Entstanden.'),
		array( '16.02.2011', '01.03.2011', 'Ende Februar folgte das zweite Treffen, bei dem sie sich wieder gut verstanden und diesesmal ohne einen medizinischen Zwischenfall.'),
		array( '21.04.2011', '26.04.2011', 'Bei diesem Treffen gab es noch ein wenig Arbeit f&uuml;r beide, da sie eine &Auml;nderungsschneiderei er&ouml;ffnete und so wurden die letzten Beh&ouml;rdeng&auml;nge gemeinsam absolviert.'),
		array( '01.06.2011', '13.06.2011', 'Dieses Treffen war sehr sch&ouml;n, da die zwei das Schwimmen f&uuml;r sich entdeckt haben und die Zeit gemeinsam mit etwas Ruhe erleben durften.'),
		array( '06.08.2011', '20.08.2011', 'F&&uuml;r dieses Treffen haben beide schon ihre W&uuml;nsche und Vorstellungen. Was sie davon erleben werden und wie auch eine Feierlichkeit sein wird, verr&auml;t nur die Zukunft.')
	);

// anzahl der Einträge in $treffen auslesen
	$counted = count($treffen);

// Versuch mit der Berechnung innerhalb der Tabelle
	echo "<h1><a name=\"berechnen\">Versuch die Zeiten zu berechnen</a></h1>
	<p>Als n&auml;chstes m&ouml;chte ich die Tabelle nochmal ausgeben und in ihr die <strong>Wartezeit</strong> zwischen der Treffen so wie auch die <strong>Dauer</strong> der Treffen zu errechnen.</p>";
	
// Ausgabe des Tabellen-Kopfes
	echo "<table id=\"uebersicht\" border=\"1\" cellspacing=\"1\" cellpadding=\"1\" >
	  <tr>
	    <th align=\"center\" valign=\"middle\" scope=\"col\">Nr</th>
	    <th align=\"center\" valign=\"middle\" scope=\"col\">Wartezeit</th>
	    <th align=\"center\" valign=\"middle\" scope=\"col\">Beginn</th>
	    <th align=\"center\" valign=\"middle\" scope=\"col\">Ende</th>
	    <th align=\"center\" valign=\"middle\" scope=\"col\">Dauer</th>
	    <th align=\"left\" valign=\"top\" scope=\"col\">Bemerkung</th>
	  </tr>";
// Ausgabe der übrigen Tabelle mit der Schleife
	for($i=0;$i<$counted;$i++)
		{

		// Berechnung der Dauer
			$dauer = round((strtotime($treffen[$i][1]) - strtotime($treffen[$i][0])),2);
			$dauertage = $dauer / 60 / 60 / 24; // in Minuten / in Stunden / in Tage
		// Berechnung der Wartezeit
			$warten = round((strtotime($treffen[$i][0]) - strtotime($treffen[$i-1][1])),2); // Beginn - Ende letztes = Wartezeit
			$wartentage = round($warten / 60 / 60 / 24,2); // in Minuten / in Stunden / in Tage

		echo "<tr>";
			echo "<td>".$i."</td>";
			echo "<td>".$wartentage." Tage</td>";
			echo "<td>".$treffen[$i][0]."</td>";
			echo "<td>".$treffen[$i][1]."</td>";
			echo "<td>".$dauertage." Tage</td>";
			echo "<td>".$treffen[$i][2]."</td>";
		echo "</tr>";
		}
	echo "</table>"; // Nach der Schleife muss die Tabelle ja geschlossen werden...
?>
</body>
</html>
Lediglich für die Berechnung der Wartezeit muss ich mir noch eine Schleife oder ähnliches einfallen lassen.

LG Muckel
 
Hallo,

an eine Wenn Dann Sonst Bedingung dachte auch ich. Und zwar wollte ich damit schauen:

Wenn treffen 22.09.2010 Dann keine Wartezeit Sonst die Berechnung.

Versucht habe ich das so:
PHP:
		// Berechnung der Wartezeit
		if ($treffen[$i][0] == '22.09.2010') {
			$wartentage = 'keine';
			}
				$warten = round((strtotime($treffen[$i][0]) - strtotime($treffen[$i-1][1])),2); // Beginn - Ende letztes = Wartezeit
				$wartentage = round($warten / 60 / 60 / 24,2); // in Minuten / in Stunden / in Tage		// Berechnung der Wartezeit
		if ($treffen[$i][0] == '22.09.2010') {
			$wartentage = 'keine';
			}
				$warten = round((strtotime($treffen[$i][0]) - strtotime($treffen[$i-1][1])),2); // Beginn - Ende letztes = Wartezeit
				$wartentage = round($warten / 60 / 60 / 24,2); // in Minuten / in Stunden / in Tage
Jedoch klappt das mit der Ausgabe noch nicht so richtig. Denn für den ersten Tag wird jetzt nicht das Wort "keine" ausgegeben, sondern die Zahl "14873.92".

Leider befinde ich mich da noch auf der Suche... Sehen könnt ihr die Ausgabe hier. Oder ist die If Bedingung an der falschen Stelle? Habe sie dort geschrieben, wo sonst die reine Rechnung stand:
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta name="author" content="Muckel">
	<meta name="description" content="&Uuml;bersicht unserer &raquo;Zeiten&laquo; - Wie lange ist es noch? Wie lange haben wir uns gesehen? Wie lange mussten wir wieder warten?">
	<meta name="keywords" lang="de" content="Counter,Countdown,zaehlen,dauer,warten">
	<meta http-equiv="content-language" content="de">
	<meta name="robots" content="all">
	<title>&Uuml;bersicht unserer &raquo;Zeiten&laquo;</title>
	<!-- Fuer das eigentliche Script wird das Stylesheet wieder eingebunden. -->
		<!--	<link href="style.css" rel="stylesheet" type="text/css" />	-->
</head>
<body>
<?php
// Datum des ersten Kontaktes
	$kontakt = strtotime("22.09.2010 14:34:00"); // Erster Kontakt auf einer Internetseite

// Angabe der Treffen in einem Array1
	$treffen = array(
		array( '22.09.2010', '22.09.2010', 'Der erste Kontakt auf einer Internetseite.'),
		array( '27.12.2010', '08.01.2011', '&Uuml;ber Silvester 2010 auf 2011 trafen sie sich das erstemal und verstanden sich auf anhieb gut. Durch eine akute Erkrankung hat er sie in das Krankenhaus begleitet und seinen Besuch nicht Abgebrochen, sondern ging jeden Tag zu ihr und besuchte sie. Vermutlich durch diese Situation ist eine feste Beziehung zwischen den beiden Entstanden.'),
		array( '16.02.2011', '01.03.2011', 'Ende Februar folgte das zweite Treffen, bei dem sie sich wieder gut verstanden und diesesmal ohne einen medizinischen Zwischenfall.'),
		array( '21.04.2011', '26.04.2011', 'Bei diesem Treffen gab es noch ein wenig Arbeit f&uuml;r beide, da sie eine &Auml;nderungsschneiderei er&ouml;ffnete und so wurden die letzten Beh&ouml;rdeng&auml;nge gemeinsam absolviert.'),
		array( '01.06.2011', '13.06.2011', 'Dieses Treffen war sehr sch&ouml;n, da die zwei das Schwimmen f&uuml;r sich entdeckt haben und die Zeit gemeinsam mit etwas Ruhe erleben durften.'),
		array( '06.08.2011', '20.08.2011', 'F&&uuml;r dieses Treffen haben beide schon ihre W&uuml;nsche und Vorstellungen. Was sie davon erleben werden und wie auch eine Feierlichkeit sein wird, verr&auml;t nur die Zukunft.')
	);

// anzahl der Einträge in $treffen auslesen
	$counted = count($treffen);

// Versuch mit der Berechnung innerhalb der Tabelle
	echo "<h1><a name=\"berechnen\">Versuch die Zeiten zu berechnen</a></h1>
	<p>Als n&auml;chstes m&ouml;chte ich die Tabelle nochmal ausgeben und in ihr die <strong>Wartezeit</strong> zwischen der Treffen so wie auch die <strong>Dauer</strong> der Treffen zu errechnen.</p>";
	
// Ausgabe des Tabellen-Kopfes
	echo "<table id=\"uebersicht\" border=\"1\" cellspacing=\"1\" cellpadding=\"1\" >
	  <tr>
	    <th align=\"center\" valign=\"middle\" scope=\"col\">Nr</th>
	    <th align=\"center\" valign=\"middle\" scope=\"col\">Wartezeit</th>
	    <th align=\"center\" valign=\"middle\" scope=\"col\">Beginn</th>
	    <th align=\"center\" valign=\"middle\" scope=\"col\">Ende</th>
	    <th align=\"center\" valign=\"middle\" scope=\"col\">Dauer</th>
	    <th align=\"left\" valign=\"top\" scope=\"col\">Bemerkung</th>
	  </tr>";
// Ausgabe der übrigen Tabelle mit der Schleife
	for($i=0;$i<$counted;$i++)
		{

		// Berechnung der Dauer
			$dauer = round((strtotime($treffen[$i][1]) - strtotime($treffen[$i][0])),2);
			$dauertage = $dauer / 60 / 60 / 24; // in Minuten / in Stunden / in Tage
		// Berechnung der Wartezeit
		if ($treffen[$i][0] == '22.09.2010') {
			$wartentage = 'keine';
			}
				$warten = round((strtotime($treffen[$i][0]) - strtotime($treffen[$i-1][1])),2); // Beginn - Ende letztes = Wartezeit
				$wartentage = round($warten / 60 / 60 / 24,2); // in Minuten / in Stunden / in Tage

		echo "<tr>";
			echo "<td>".$i."</td>";
			echo "<td>".$wartentage." Tage</td>";
			echo "<td>".$treffen[$i][0]."</td>";
			echo "<td>".$treffen[$i][1]."</td>";
			echo "<td>".$dauertage." Tage</td>";
			echo "<td>".$treffen[$i][2]."</td>";
		echo "</tr>";
		}
	echo "</table>"; // Nach der Schleife muss die Tabelle ja geschlossen werden...
?>
</body>
</html>
Werde nacher noch danach schauen, da ich jetzt paar Bezüge vom Dachboden holen muss.

Vielen Dank bisher!
 
Du machst es Dir zu schwer! Frage doch nicht nach dem Inhalt der Variable, sondern nach der aktuellen Position.. Im Grunde genommen machst Du jene Berechnung NICHT, wenn der Zähler beim ersten Eintrag ist, also $i=0. Mehr ist doch gar nicht nötig..

mfg chmee
 

Neue Beiträge

Zurück