Problem mit dem berechnen der Zeit

Muckel1986

Erfahrenes Mitglied
Hallo zusammen,

habe ein kleines Script, in dem ich verschiedene Zeiten ausgebe. Grund dafür ist, dass ein befreundetes Pärchen die Zeiten festhalten möchten, in denen sie sich sehen und eben nicht sehen. Entstanden ist daher dieser php-Teil:
PHP:
<?php
//Vordefinierte Werte
	$datum = date("d.m.Y");	// Aktuelles Datum
	$zeit = date("H:i:s");	// Aktuelle Uhrzeit

	// Erster Kontakt
	$kontakt = strtotime("28.09.2010"); // Erster Kontakt auf gofeminin.de
	// 1. Treffen
	$treffen_1_start = strtotime("27.12.2010"); 	// Beginn
	$treffen_1_ende = strtotime("08.01.2011"); 	// Ende
	// 2. Treffen
	$treffen_2_start = strtotime("16.02.2011"); 	// Beginn
	$treffen_2_ende = strtotime("01.03.2011"); 	// Ende
	// 3. Treffen
	$treffen_3_start = strtotime("21.04.2011"); 	// Beginn
	$treffen_3_ende = strtotime("26.04.2011");	// Ende
	// 4. Treffen
	$treffen_4_start = strtotime("01.03.2011"); 	// Beginn
	$treffen_4_ende = strtotime("01.03.2011");	// Ende
	// 5. Treffen
	$treffen_5_start = strtotime("01.03.2011"); 	// Beginn
	$treffen_5_ende = strtotime("01.03.2011");	// Ende
	// 6. Treffen
	$treffen_6_start = strtotime("01.03.2011"); 	// Beginn
	$treffen_6_ende = strtotime("01.03.2011");	// Ende
	// 7. Treffen
	$treffen_7_start = strtotime("01.03.2011"); 	// Beginn
	$treffen_7_ende = strtotime("01.03.2011");	// Ende
	// 8. Treffen
	$treffen_8_start = strtotime("01.03.2011"); 	// Beginn
	$treffen_8_ende = strtotime("01.03.2011");	// Ende
	// 9. Treffen
	$treffen_9_start = strtotime("01.03.2011"); 	// Beginn
	$treffen_9_ende = strtotime("01.03.2011");	// Ende
	// 10. Treffen
	$treffen_10_start = strtotime("01.03.2011"); 	// Beginn
	$treffen_10_ende = strtotime("01.03.2011");	// Ende

// errechnen wie viele Tage die Treffen hatten
	// Dauer 1. Treffen
	$treffen_1_dauer = (($treffen_1_ende - $treffen_1_start) / 86400);
	// Dauer 2. Treffen
	$treffen_2_dauer = (($treffen_2_ende - $treffen_2_start) / 86400);
	// Dauer 3. Treffen
	$treffen_3_dauer = (($treffen_3_ende - $treffen_3_start) / 86400);
	// Dauer 4. Treffen
	$treffen_4_dauer = (($treffen_4_ende - $treffen_4_start) / 86400);
	// Dauer 5. Treffen
	$treffen_5_dauer = (($treffen_5_ende - $treffen_5_start) / 86400);
	// Dauer 6. Treffen
	$treffen_6_dauer = (($treffen_6_ende - $treffen_6_start) / 86400);
	// Dauer 7. Treffen
	$treffen_7_dauer = (($treffen_7_ende - $treffen_7_start) / 86400);
	// Dauer 8. Treffen
	$treffen_8_dauer = (($treffen_8_ende - $treffen_8_start) / 86400);
	// Dauer 9. Treffen
	$treffen_9_dauer = (($treffen_9_ende - $treffen_9_start) / 86400);
	// Dauer 10. Treffen
	$treffen_10_dauer = (($treffen_10_ende - $treffen_10_start) / 86400);

// errechnen der Wartezeiten
	// Wartezeit 1
	$warten_1 = (($treffen_1_start - $kontakt) / 86400); 	// Zeit zw. Ersten Kontakt und 1. Treffen
	// Wartezeit 2
	$warten_2 = (($treffen_2_start - $treffen_1_ende) / 86400); 	// Zeit zw. 1. und 2. Treffen
	// Wartezeit 3
	$warten_3 = (($treffen_3_start - $treffen_2_ende) / 86400); 	// Zeit zw. 1. und 2. Treffen
	// Wartezeit 4
	$warten_4 = (($treffen_4_start - $treffen_3_ende) / 86400); 	// Zeit zw. 1. und 2. Treffen
	// Wartezeit 5
	$warten_5 = (($treffen_5_start - $treffen_4_ende) / 86400); 	// Zeit zw. 1. und 2. Treffen
	// Wartezeit 6
	$warten_6 = (($treffen_6_start - $treffen_5_ende) / 86400); 	// Zeit zw. 1. und 2. Treffen
	// Wartezeit 7
	$warten_7 = (($treffen_7_start - $treffen_6_ende) / 86400); 	// Zeit zw. 1. und 2. Treffen
	// Wartezeit 8
	$warten_8 = (($treffen_8_start - $treffen_7_ende) / 86400); 	// Zeit zw. 1. und 2. Treffen
	// Wartezeit 9
	$warten_9 = (($treffen_9_start - $treffen_8_ende) / 86400); 	// Zeit zw. 1. und 2. Treffen
	// Wartezeit 10
	$warten_10 = (($treffen_10_start - $treffen_9_ende) / 86400); 	// Zeit zw. 1. und 2. Treffen
?>

und diese kleine html-Ausgabe:
HTML:
<div id="spalte">
	<ol>
		<li>Erster Kontakt:<br />
		<?php echo (date("d.m.y", $kontakt)); ?></li>
		<li>Wartezeit: <?php echo (round($warten_1, 0)); ?> Tage</li>
		<li>Erstes Treffen
			<ul><li>Beginn:<?php echo (date("d.m.y", $treffen_1_start)); ?></li>
			<li>Ende:<?php echo (date("d.m.y", $treffen_1_ende)); ?></li>
			<li>Dauer: <?php echo (round($treffen_1_dauer, 0)); ?> Tage</li></ul></li>
		<li>Wartezeit: <?php echo (round($warten_2, 0)); ?> Tage</li>
		<li>Zweites Treffen
			<ul><li>Beginn:<?php echo (date("d.m.y", $treffen_2_start)); ?></li>
			<li>Ende:<?php echo (date("d.m.y", $treffen_2_ende)); ?></li>
			<li>Dauer: <?php echo (round($treffen_2_dauer, 0)); ?> Tage</li></ul></li>
		<li>Wartezeit: <?php echo (round($warten_3, 0)); ?> Tage</li>
		<li>Drittes Treffen
			<ul><li>Beginn:<?php echo (date("d.m.y", $treffen_3_start)); ?></li>
			<li>Ende:<?php echo (date("d.m.y", $treffen_3_ende)); ?></li>
			<li>Dauer: <?php echo (round($treffen_3_dauer, 0)); ?> Tage</li></ul></li>
		<li>Wartezeit: <?php echo (round($warten_4, 0)); ?> Tage</li>
		<li>Viertes Treffen
			<ul><li>Beginn:<?php echo (date("d.m.y", $treffen_4_start)); ?></li>
			<li>Ende:<?php echo (date("d.m.y", $treffen_4_ende)); ?></li>
			<li>Dauer: <?php echo (round($treffen_4_dauer, 0)); ?> Tage</li></ul></li>
		<li>Wartezeit: <?php echo (round($warten_5, 0)); ?> Tage</li>
		<li>F&uuml;nftes Treffen
			<ul><li>Beginn:<?php echo (date("d.m.y", $treffen_5_start)); ?></li>
			<li>Ende:<?php echo (date("d.m.y", $treffen_5_ende)); ?></li>
			<li>Dauer: <?php echo (round($treffen_5_dauer, 0)); ?> Tage</li></ul></li>
		<li>Wartezeit: <?php echo (round($warten_6, 0)); ?> Tage</li>
		<li>Sechstes Treffen
			<ul><li>Beginn:<?php echo (date("d.m.y", $treffen_6_start)); ?></li>
			<li>Ende:<?php echo (date("d.m.y", $treffen_6_ende)); ?></li>
			<li>Dauer: <?php echo (round($treffen_6_dauer, 0)); ?> Tage</li></ul></li>
		<li>Wartezeit: <?php echo (round($warten_7, 0)); ?> Tage</li>
		<li>Siebtes Treffen
			<ul><li>Beginn:<?php echo (date("d.m.y", $treffen_7_start)); ?></li>
			<li>Ende:<?php echo (date("d.m.y", $treffen_7_ende)); ?></li>
			<li>Dauer: <?php echo (round($treffen_7_dauer, 0)); ?> Tage</li></ul></li>
		<li>Wartezeit: <?php echo (round($warten_8, 0)); ?> Tage</li>
		<li>Achtes Treffen
			<ul><li>Beginn:<?php echo (date("d.m.y", $treffen_8_start)); ?></li>
			<li>Ende:<?php echo (date("d.m.y", $treffen_8_ende)); ?></li>
			<li>Dauer: <?php echo (round($treffen_8_dauer, 0)); ?> Tage</li></ul></li>
		<li>Wartezeit: <?php echo (round($warten_9, 0)); ?> Tage</li>
		<li>Neuntes Treffen
			<ul><li>Beginn:<?php echo (date("d.m.y", $treffen_9_start)); ?></li>
			<li>Ende:<?php echo (date("d.m.y", $treffen_9_ende)); ?></li>
			<li>Dauer: <?php echo (round($treffen_9_dauer, 0)); ?> Tage</li></ul></li>
		<li>Wartezeit: <?php echo (round($warten_10, 0)); ?> Tage</li>
		<li>Zehntes Treffen
			<ul><li>Beginn:<?php echo (date("d.m.y", $treffen_10_start)); ?></li>
			<li>Ende:<?php echo (date("d.m.y", $treffen_10_ende)); ?></li>
			<li>Dauer: <?php echo (round($treffen_10_dauer, 0)); ?> Tage</li></ul></li>
		<li>Wartezeit: <?php echo (round($warten_11, 0)); ?> Tage</li>
	</ol>
</div>
Mein Problem ist jetzt noch, dass ich ausgeben möchte, wie lange es bis zu deren Treffen noch ist, ab dem Zeitpunkt, wo die Webseite aufgerufen wurde. Versucht habe ich es damit:
PHP:
$heute = mktime();	// Zeitstempel

$counter_3 = ($treffen_3_start - $heute);
Und die Ausgabe so:
HTML:
<?php echo ("" . date(" H:i:s d.m.y", $counter_3) . ""); ?>

Leider funktioniert das nicht. Für den Rest habe ich auch mit der date Funktion gearbeitet. Möchte halt eine Angabe in X Tage und Stunden:Minuten haben. Irgendwie habe ich gerade keine Idee wie.

Hoffe ihr könnt mir helfen.

Lieben Gruß
Muckel
 
Sehe selbst da leider irgendwie nicht den Fehler heraus. Habe einmal die Rechnung:
Code:
  Treffen  21.3.2011
- Heute   12.04.011
------------------------
: 86400
------------------------
= Tage 8,xxxx
===========
Im php-Teil sieht das so aus:
PHP:
$counter_3 = (($treffen_3_start - $heute) / 86400);
das Ausgeben so:
HTML:
Aktuelle Zeit: <?php echo ("" . date("H:i:s d.m.Y", $heute) . ""); ?><br />
Wartezeit: <?php echo ("" . date(" H:i:s d.m.Y", $counter_3) . ""); ?><br />
Test...<?php echo ($counter_3); ?>
und das sind die Werte, die ich erhalte:
Code:
Aktuelle Zeit: 18:31:41 12.04.2011
Wartezeit: 01:00:08 01.01.1970
Test...8.2279976851852
Die 8 unten, also die ausgabe der Variable ohne das date, stimmt ja schonmal fast - ich müsste es "nur" noch in Stunde:Minuten und Tage teilen, was ich eben durch das date versucht hatte.

Gruß und vielen Dank
Muckel
 
In $counter_3 müsste eine Integer-Zahl stehen. Warum kannst du diese Zahl nicht mal ausgeben?
 
Guten Abend,

was meinst Du mit Integer Zahl?

Wenn Du dir das lange PHP-Script oben anschaust, habe ich für jedes Treffen zwei Variablen. Einmal mit für den ersten Tag und für den letzten Tag. Die Ausgabe funktioniert auch.

Dann habe ich daraus auch die Dauer berechnet und dazwischen auch die Wartezeit.

Nun habe ich eben das Problem, dass ich wissen möchte, wie lange die Zeit bis zu dem kommenden Treffen ist. Daher habe ich im grunde das hier:
PHP:
$heute = mktime();	// Zeitstempel

// 3. Treffen
	$treffen_3_start = strtotime("21.04.2011"); 	// Beginn
	$treffen_3_ende = strtotime("26.04.2011");	// Ende

// Dauer 3. Treffen
	$treffen_3_dauer = (($treffen_3_ende - $treffen_3_start) / 86400);

// Uebrige Zeit zum Treffen
	$counter_3 = (($treffen_3_start - $heute) / 86400);
In so einer Variable möchte ich es haben, damit man ganz einfach neue Treffen hinzufügen kann. Und das ist der Versuch der Ausgabe:
HTML:
<!-- Uebrige Zeit ausgeben -->
	Aktuelle Zeit: <?php echo ("" . date("H:i:s d.m.Y", $heute) . ""); ?><br />
	Wartezeit: <?php echo ("" . date(" H:i:s d.m.Y", $counter_3) . ""); ?><br />
	Es sind noch <?php echo (round($counter_3, 2)); ?> Tage...
	Ungerundet ist es: <?php echo ($counter_3); ?>
Das erzeugt dann diese Ausgabe:
Code:
Aktuelle Zeit: 19:03:40 12.04.2011
Wartezeit: 01:00:08 01.01.1970
Es sind noch 8.21 Tage... 
Ungerundet ist es: 8.2037152777778
Wie man sieht, passt die gerundete und ungerundete Angaben (8,21) ja auch. Nur das ich diese "Tage" eben in Stunden:Minuten und Tage ausgeben möchte.

Lieben Gruß
Tobias
 
Zuletzt bearbeitet:
Der Modulo-Operator ist dein Freund:
PHP:
<?php
$heute = mktime();    // Zeitstempel

// 3. Treffen
    $treffen_3_start = strtotime("21.04.2011");     // Beginn
    $treffen_3_ende = strtotime("26.04.2011");    // Ende

// Dauer 3. Treffen
    $treffen_3_dauer = (($treffen_3_ende - $treffen_3_start) / 86400);

// Uebrige Zeit zum Treffen
    $counter_3 = (($treffen_3_start - $heute) / 86400);

/********************************************************/

  $counter_3_sec = abs($treffen_3_start - $heute);
  echo '<br>Sekunden: '.$counter_3_sec.'<hr>';

  $counter_3_min = intval($counter_3_sec / 60);
  $counter_3_sec %= 60;
  echo '<br>Minuten: '.$counter_3_min.'<br>Sekunden-Rest: '.$counter_3_sec.'<hr>';

  $counter_3_h = intval($counter_3_min / 60);
  $counter_3_min %= 60;
  echo '<br>Stunden: '.$counter_3_h.'<br>Minuten-Rest: '.$counter_3_min.'<hr>';

  $counter_3_d = intval($counter_3_h / 24);
  $counter_3_h %= 24;
  echo '<br>Tage: '.$counter_3_d.'<br>Stunden-Rest: '.$counter_3_h.'<hr>';

  echo '<br>Also: '.$counter_3_d.' Tage, '.$counter_3_h.' Stunden, '.$counter_3_min.' Minuten und '.$counter_3_sec.' Sekunden<hr>';

?>
Und so sieht die Ausgabe aus:
Code:
Sekunden: 706015

Minuten: 11766
Sekunden-Rest: 55

Stunden: 196
Minuten-Rest: 6

Tage: 8
Stunden-Rest: 4

Also: 8 Tage, 4 Stunden, 6 Minuten und 55 Sekunden
 
Guten Abend,

es hat funktioniert. Was ich nur nicht so nachvollziehen kann ist, wozu man die Rest-Angaben benötigt. Könntest Du mir die Zeilen mit dem % kurz erklären?
Code:
Sekunden: 8
Minuten: 4
Sekunden-Rest: 8
Stunden: 2
Minuten-Rest: 4
Tage: 8
Stunden-Rest: 2
Also: 8 Tage 2 Stunden 4 Minuten und 8 Sekunden
Vielen Dank für Deine Hilfe!

Lieben Gruß
Tobias
 
Guten Morgen zusammen,

das Script funktioniert nun auch, wie ihr hier sehen könnt. Nun habe ich bei dem Script nur die Tage angegeben und damit gerechnet:
PHP:
// 3. Treffen
	$treffen_3_start = strtotime("21.04.2011"); 	// Beginn
	$treffen_3_ende = strtotime("26.04.2011");	// Ende
	$treffen_3_dauer = (($treffen_3_ende - $treffen_3_start) / 86400);	// Dauer
// Wartezeit 3
	$warten_3 = (($treffen_3_start - $treffen_2_ende) / 86400); 	// Zeit zwischen den Treffen
Kann ich bei diesem nun auch die Uhrzeit mit angeben? Denn die Ausgabe erfolgt unter anderem mit date() :
PHP:
<ol>
	<li>Zweites Treffen
		<ul><li>Beginn:<?php echo (date("d.m.Y", $treffen_2_start)); ?></li>
		<li>Ende:<?php echo (date("d.m.Y", $treffen_2_ende)); ?></li>
		<li>Dauer: <?php echo (round($treffen_2_dauer, 0)); ?> Tage</li></ul></li>
	<li>Wartezeit: <?php echo (round($warten_3, 0)); ?> Tage</li>
	<li>Drittes Treffen
		<ul><li>Beginn:<?php echo (date("d.m.Y", $treffen_3_start)); ?></li>
		<li>Ende:<?php echo (date("d.m.Y", $treffen_3_ende)); ?></li>
		<li>Dauer: <?php echo (round($treffen_3_dauer, 0)); ?> Tage</li></ul></li>
	<li>Wartezeit: <?php echo (round($warten_4, 0)); ?> Tage</li>
</ol>
Wäre schön, wenn ihr mir auch dabei noch helfen könntet.

Denn die Treffen Beginnen und Enden mit der Ankunfts- und Abfahrtszeit eines Zuges.

Lieben Gruß
Muckel
 
... Was ich nur nicht so nachvollziehen kann ist, wozu man die Rest-Angaben benötigt. Könntest Du mir die Zeilen mit dem % kurz erklären?
Hallo,

die Ganzzahldivision wird verwendet, wenn man beispielsweise wissen will wie viele Minuten in 706015 Sekunden enthalten sind. Mit einer Ganzzahldivision erhält man immer ein ganzzahliges Ergebnis und einen ganzzahligen Rest:
PHP:
$minuten = intval(706015 / 60);  //(ergibt das ganzzahlige Resultat: 11766)
Durch Modulo-Rechnung kann man auch den Rest ermitteln:
PHP:
$sekundenRest = 706015 % 60;     //(ergibt den ganzzahligen Rest: 55)
Ergebnis:
1 Minute enthält 60 Sekunden.
706015 Sekunden enthält 11766 Minuten und 55 Sekunden.

Falls man nun wissen möchte, wieviele Stunden in 11766 Minuten enthalten sind, dann macht man eine analoge Rechnung wie zuvor:
PHP:
$stunden = intval(11766 / 60);  //(ergibt: 196)
$minutenRest = 11766 % 60;      //(ergibt: 6)
Ergebnis:
1 Stunde enthält 60 Minuten.
11766 Minuten enthält 196 Stunden und 6 Minuten.

Falls man nun wissen möchte, wieviele Tage in 196 Stunden enthalten sind, dann macht man eine analoge Rechnung wie zuvor:
PHP:
$tage = intval(196 / 24);  //(ergibt: 8)
$stundenRest = 196 % 24;   //(ergibt: 4)
Ergebnis:
1 Tag enthält 24 Stunden.
196 Stunden enthält 8 Tage und 4 Stunden.

Gesamtergebnis:
706015 Sekunden sind: 8 Tage, 4 Stunden, 6 Minuten und 55 Sekunden.

So viel also zur kurzen Erklärung. Damit könnte man nun z.B. folgende Funktion schreiben:
PHP:
function zeitspanne($tmStmp1, $tmStmp2)
{
	/* Prüfung, ob die Eingangsparameter wirklich vom Typ integer (Zeitstempel) sind: */
	if(is_int($tmStmp1) && is_int($tmStmp2))
	{
		$retArr['s'] = abs($tmStmp1 - $tmStmp2);
		$retArr['m'] = intval($retArr['s']/60);
		$retArr['s'] %= 60;
		$retArr['h'] = intval($retArr['m']/60);
		$retArr['m'] %= 60;
		$retArr['d'] = intval($retArr['h']/24);
		$retArr['h'] %= 24;

// Ausgabe als assioziatives Array:
		return $retArr;
// oder Ausgabe der Zeitspanne als period-String nach ISO 8601:
//   return 'P'.$retArr['d'].'DT'.$retArr['h'].'H'.$retArr['m'].'M'.$retArr['s'].'S';
	}
	else
	{
		return false;
	}
}
 
Guten Abend,

habe noch eine Frage zu
PHP:
strtotime
und zwar möchte ich bei dem Script ja Datum und Zeit berechnen. Kann man in einer Angabe bei strtotime ein Datum und Uhrzeit gleichzeitig angeben? Also so:
PHP:
	// 4. Treffen
	$treffen_4_start = strtotime("11.06.2011 16:02:00"); 	// Beginn
	$treffen_4_ende = strtotime("18.06.2011 15:00:00");	// Ende
	$treffen_4_dauer = (($treffen_4_ende - $treffen_4_start) / 86400);	// Dauer
Denn dann könnte ich bei meinem Script auch die Uhrzeit verwenden.

Lieben Gruß
Tobias
 
Zurück