kleines Script um Zeiten von verschiedenen Treffen zu berechnen

Guten Abend,

da weiß ich nicht, wie Du das meinst.

So wie ich das gelöst habe, bekomme ich eben für den ersten Eintrag auch eine Ausgabe (keine), welche ich in der Tabelle auch stehen haben möchte. Denn für einen ersten Kontakt kann es ja keine Wartezeit geben und das möchte ich in der Tabelle auch verdeutlichen/ausgeben.

Was nun eigentlich noch fehlt wäre, dass man wo das Datum steht, eben auch eine Uhrzeit mit Datum angeben könnte. Für den 6.8.11 wäre es zum Beispiel 11:41 Uhr, wo sie sich an einem Bahnhof treffen.

Aber dazu werde ich mir morgen erstmal noch ein paar Informationen durchlesen, um dann selbst bissel auszuprobieren.

Vielen Dank Muckel!
 
PHP:
  // Berechnung der Wartezeit
        if ($i == 0) { echo"nein"; }
        else { echo "ja"; }
// und das noch ein zweites Mal
Du hast doch schon zuvor mit strtotime() mit Datum&Zeiten gearbeitet..

mfg chmee
 
Guten Abend / Morgen,

die Uhrzeiten werden, so denke ich, auch nicht mein Problem.

Bei der Summenbildung der Gesamttage / Wartezeit weiß ich eben nicht, wie ich das machen soll. Für die Berechnung der Dauer für jedes Treffen, habe ich mich ja in einem der "unter arrays" aufgehalten:
PHP:
	// Ausgabe der übrigen Tabelle mit der Schleife
	for($i=0; $i<$anzahl; $i++)
		{
		// Berechnung Dauer des Treffen
			$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 Berechnung der Wartezeit habe ich dank deiner Hilfe ja die Möglichkeit gefunden, wie ich zu dem übergeordnetem array wechseln kann (-1):
PHP:
		// Berechnung Wartezeit zwischen der Treffen ohne des ersten Kontaktes
			if ($treffen[$i][0] == '22.09.2010') {
				$wartentage = 'keine Wartezeit';
				} else {
						$warten = round((strtotime($treffen[$i][0]) - strtotime($treffen[$i-1][1])),2); // Berechnung Wartezeit
						$wartentage = round($warten / 60 / 60 / 24,2); // in Minuten / in Stunden / in Tage
					}
Doch nun bräuchte ich einen Weg, wie ich das für alle "unter arrays" machen kann. Die Anzahl der Treffen, konnte ich ja noch ganz einfach bestimmen, da dabei einfach der erste Eintrag abgezogen wurde:
PHP:
// Anzahl der Treffen, verringert um den ersten Kontakt
				$begegnungen = ($anzahl - 1);
Dabei ist $anzahl einfach die Zählung (count) des arrays. Da in dem ersten Eintrag aber lediglich ein Tag angegeben ist, an dem man sich ja nicht traf, musste ich den Wert einfach um 1 verringern.

Für die Berechnung aller Tage bei dem array muss ich ja auf alle "unterpunkte" zugreifen können. Durch die IF Bedingung erhalte ich ja diese 6 Zeilen
Code:
0	-	22.09.2010	22.09.2010	0 Tage
1	96.04	27.12.2010	08.01.2011	12 Tage
2	39	16.02.2011	01.03.2011	13 Tage
3	50.96	21.04.2011	26.04.2011	 5 Tage
4	36	01.06.2011	13.06.2011	12 Tage
5	54	06.08.2011	20.08.2011	14 Tage
Doch die errechneten Summen werden ja erst "in der Zeile berechnet" und nicht vor der Ausgabe der gesamten Tabelle. Daher weiß ich im Moment nicht, wie ich das für sozusagen unter der Tabelle eine Summe für die Spalte Dauer und Wartezeit erstellen kann.

Bei dem Countdown dachte ich eigentlich, ich könnte das Schema von der Tabelle auch anwenden. Doch irgendwie klappt mein Versuch nicht:
PHP:
echo ("<p>Die Seite wurde am ".$datum." um ".$zeit." aufgerufen.</p>"); 

// Erstellung des Countdown...
		echo "<p>Es sind noch W Tage X Stunden Y Minuten Z Sekunden.</p>";
		if ($treffen[$i][0] == ($anzahl - 1) ) {
			$countdown = ($treffen[$i][0] - $datum);
		}
		echo "<p>i: ".$i[0]."<br />";
		echo "Anzahl: ".$anzahl."<br />";
		echo "Datum: ".$datum."<br />";
		echo "Countdown: ".$countdown."</p>";

Das Datum und die Uhrzeit des Seitenaufrufes werden ausgegben. Mit der if Anweisung wollte ich folgendes Ausdrücken:

Wenn$anzahl $i entspricht Dann $i minus $datum

Das würde dann eigentlich dafür sorgen, dass das Script zu dem letzten unter array geht (durch $anzahl) und das dort dann eben die Rechnung mit dem Datum durchgeführt wird.

Habe verschiedene Varianten ausprobiert, doch irgendwie klappt es nicht. Diech echo Ausgaben hatte ich mir da nur rein geschrieben, damit ich ein wenig sehe, was geschieht.

Im Grunde habe ich jetzt die Baustellen / offenen Fragen:
  • Wie kann ich für die Dauer und Wartezeit eine Gesamte Summe bilden?
  • Wie kann ich einen "Countdown" zu dem letzten Array Termin erzeugen?
Für die gesamt Summen hätte ich noch die Idee, dass ich das Ergebnis von $wartentage bzw. $dauertage in einer extra Variablen zusammen addieren könnte. Doch da wüsste ich auch nicht wie, da dies dann ja wiederum so gemacht werden müsste, dass der Wert auch erhalten bleibt, wenn die for bzw. if Anweisung von vorne beginnt. Damit wäre ich dann wieder bei der Problematik....

Da ich das gnze ja auch mache, um mir den kram ein wenig bei zu bringen, wäre ich für erklärungen dankbar!
 
Countdown funktioniert :)

Guten Morgen zusammen,

der Countdown funktioniert nun. Mein Fehler war, dass ich bei dem die "Verbindung" zum array nochmal aufbauen muss. Meine Annahme zuvor war, dass die gesetzten Variablen auch nach der for Bedingung erhalten bleiben. Man lernt halt nie aus.

Der Countdown schaut nun so aus:
PHP:
	<!-- Zeit bis zum Treffen -->
	<p style="text-align:center; margin:1em; font-size:1.5em; color:#660000;"><strong>
	<?php
	// Erstellung des Countdown...
		for($i=0; $i<$anzahl; $i++) // Verbindung zum Array aufnehmen
		{
		if ($i == ($anzahl - 1)) {  // Pruefen ob es das letzte Array ist. Da die Arrays ab 0 gezählt werden, bei count(); es aber mit 1 beginnt, muss hier die anzahl um 1 verringert werden.
				$counter = ((strtotime($treffen[$i][0]) - $heute)); // Berechnung der Zeit zum Treffen
				$counter_sec = abs(strtotime($treffen[$i][0]) - $heute);	// in Sekunden
				$counter_min = intval($counter_sec / 60);		// in Minuten
				$counter_sec %= 60;	// Verhältnis zw Sekunde und Minute
				$counter_h = intval($counter_min / 60);		// in Stunden
				$counter_min %= 60;	// Verhältnis zw Minute und Stunde
				$counter_d = intval($counter_h / 24);		// und der Tag
				$counter_h %= 24;	// Verhältnis h zu Tag
				// Die einzelnen Operatore muss ich mir allerdings noch anschauen/erklären, doch es klappt
			// Ausgabe als Counter
			echo "".$counter_d." Tage ".$counter_h." Stunden ".$counter_min." Minuten ".$counter_sec." Sekunden";
			} 
		}
	?></strong></p>
Dabei bin ich wie folgt vorgegangen:
  • "Verbindung" zu dem Array aufnehmen
  • Prüfen ob der letzte Array-Eintrag gewählt ist. Die $anzahl muss dabei um 1 verringert werden, da die Zählung in php (count) mit 1 beginnt, die Indexierung der arrays aber mit 0. Um dies zu berücksichtigen, habe ich ganz einfach ($anzahl - 1) genutzt.
  • Trifft das zu, dann beginnt die Rechnung. Dabei habe ich zuerst das "Anfangsdatum des Treffen" Minus "aktuellem Zeitstempel" gewählt.
  • Danach musste dieses Ergebnis nur noch in die einzelnen "Bereiche" für Tage, Stunden, Minuten, Sekunden aufgedröhselt werden. Dies klappte zum Glück dank 7 Code-Zeilen, die mir hier gegeben wurden.
Nun habe ich also nur noch das Problem, dass ich die Gesamtsummen der Dauer und der Wartezeit erheben muss, doch damit beschäftige ich mich heute und am Wochenende.

Lieben Gruß und vielen Dank bisher!
 
Zu dem Datum auch die Uhrzeit

Hi,

wenn du die einzelnen Einträge mittels der strtotime()-Funktion umrechnest, kannst du mit ihnen wunderbar rechnen. Die Datumse werden in den sogenannten Unix-Timestamp umgerechnet. Dieser ist ein Integerwert mit den Anzahl der Sekunden, die seit dem 1.1.1970 vergangen sind.

Du wandelst also beide Werte in diesen Unixtimestamp um, berechnest die Differenz und rechnest die Sekunden in die gewünschte Einheit um.

Best regards
Danke, das habe ich nun auch genutzt. Jedoch habe ich dazu noch eine Frage und zwar, wie die Schreibweise ist, wenn ich die Uhrzeit einbinden möchte? Es gebe da ja diese Varianten:
PHP:
$Test1 = '06.08.2011 12:41:33';
$Test2 = '12:41:33 06.08.2011';

$Zeitstempel = mktime();

$rechnung1 = (strtotime($Test1) - $Zeitstempel;
$rechnung2 = (strtotime($Test2) - $Zeitstempel;

echo "<p>Rechnung 1: ".$rechnung1."<br />Rechnung 2: ".$rechnung2."</p>";
Dann noch die Frage, ob man das überhaupt so in eine Bedingung schreiben kann? Sprich muss die Uhrzeit vorne oder hinten stehen? Ein Leerzeichen zwischen der Zeit und dem Datum?

Diese Zeilen
PHP:
// Zeit Testen
echo "<h1>Testen der Zeiten</h1>";
$Test1 = '06.08.2011 12:41:33';
$Test2 = '12:41:33 06.08.2011';

$Zeitstempel = mktime();

$rechnung1 = (strtotime($Test1) - $Zeitstempel);
$rechnung2 = (strtotime($Test2) - $Zeitstempel);

echo 	"<p>Rechnung 1: ".$rechnung1."<br />Rechnung 2: ".$rechnung2."</p>
		<p>Rechnung 1: ".date("H:i:s d.m.Y", $rechnung1)."<br />Rechnung 2: ".date("H:i:s d.m.Y", $rechnung2)."</p>";
habe ich nun getestet und erhalte folgende Ausgabe:
Testen der Zeiten

Rechnung 1: 694960
Rechnung 2: 694960

Rechnung 1: 02:02:40 09.01.1970
Rechnung 2: 02:02:40 09.01.1970
Daher werde ich mir nun das mit den Datum und Zeitangaben auch noch aneignen müssen.

Lieben Gruß
 
Hi,

PHP:
<?php

$dt1 = '09.01.1970 02:02:40';
$dt2 = '02:02:40 09.01.1970';

echo strtotime($dt1) . '<br />';
echo strtotime($dt2);

Ergibt beides 694960. Da erstere Schreibweise bei uns sicher verbreiteter ist, kannst du die auch benutzen. :)

Best regards
 

Neue Beiträge

Zurück