Datumsberechung

Hallo Gemeinde,

ich zerschelle gerade an einem kleinen 3 Zeiler Script ^^
Uptime des server kann ich ja abfragen…die aktuelle zeit auch…jetzt würde ich mir gerne die differenz anzeigen lassen…eben auch schön formatiert…

Hier mal mein bescheidener Ansatz und danach was das echo bringt :

<?

$now = "
" . date("d.m.Y - H:i:s",time());
$laststart = gmdate("d.m.Y - H:i:s", IPS_GetUptime());

$uptime = ($now-$laststart);

SetValuestring(24224 /*[Mein Haus\Wohnzimmer\Licht\Last Start]*/,$laststart);



echo $laststart;
echo $now;

echo "
" . date("d.m.Y - H:i:s",$uptime);


?>

Echo:
13.03.2013 - 23:22:51
20.03.2013 - 15:28:09
01.01.1970 - 01:00:07

Habt ihr ne idee, wo es bei mir wieder hängt ? :slight_smile:

Lieben Gruß
Sascha

Du musst vorher die Zeiten in einen UNIX-Timestamp umwandeln, anschließend berechnen und danach das Ergebnis wieder von UNIX in ein lesbares/verständliches Format bringen.

Mit mktime() kann man sich den UNIX-Timestamp für eine bestimmte Uhrzeit und ein bestimmtes Datum zurückgeben lassen.
Mit strftime() formatiert man eine Zeitangabe (timestamp)
Beispiele siehe hier : http://selfphp.de/funktionsuebersicht/datums_und_zeit_funktionen.php#strftime

Geht sicher eleganter - funktioniert aber:


<?

$now = time();
$laststart = IPS_GetUptime();
$uptime = ($now-$laststart);
echo $uptime."
";

$day = (int)($uptime/24/60/60);
$uptime = $uptime-$day*24*60*60;
echo $uptime."
";

$hour = (int)($uptime/60/60);
$uptime = $uptime-$hour*60*60;

$minute = (int)($uptime/60);
echo $uptime."
";

echo $day." Tage(e) ".$hour." Stunde(n) ".$minute." Minute(n).";

?>

Oh…danke Kronos :slight_smile:

ich war die letzten Stunden auch nicht ganz untätig :slight_smile:

Momentan habe ich noch das problem der Textformatierung in einem String (völliges Neuland für mich)

Mein Text im String unterscheidet erfolgreich zwischen 1 Sekunde und 2 Sekunden

Leider „verrutscht“ die Zeile natürlich kurz in der im Webfront angezeigten Variablen.

Wenn ich es als echo ausgebe, kann ich mit leerzeichen arbeiten…die Stringvariable im Webfront ignoriert das aber gekonnt :slight_smile:
Ich finde mein Script VIEL eleganter als deines kronos…bei meinem kann man so schön den Finger am Mausrad trainieren :slight_smile: Bei Dir paßt ja leider alles auf eine Seite ^^

Also falls ich das mit der formatierung noch in den Griff bekommen würde, wäre es ja fertig :slight_smile:
Vielleicht habt ihr ja ne Idee ?

Hier mal mein Ansatz soweit :

<?

$laststart = date("d.m.Y - H:i:s", IPS_GetUptime());

$unixlaststart = IPS_GetUptime();
$unixnow = strtotime ( 'now' ) . "
";
$unixdiff = ($unixnow-$unixlaststart);




SetValuestring(24224 /*[Mein Haus\Info\links\IPS Uptime\Last Start :]*/,$laststart);




$diff 	= $unixdiff;
$minute 	= 60;
$hour 	= $minute*60;
$day  	= $hour * 24;
$month 	= $day*365/12;
$year    = $day * 365;

$rS = ""; //runningSince

	//Jahre
	if($diff >= ($year*2))
	{
			echo ((integer)($diff/$year))." Jahre ";
			$rS = $rS . ((integer)($diff/$year))." Jahre ";
			$diff =$diff - ($year*(integer)($diff/$year));
	}
	else
	{
		if($diff >= $year)
		{
			echo ((integer)($diff/$year))." Jahr  ";
			$rS = $rS ((integer)($diff/$year))." Jahr  ";
			$diff =$diff - ($year*(integer)($diff/$year));
		}
		else
		{
		   echo " 0 Jahre ";
		   $rS = $rS . " 0 Jahre ";
		}
	}
	
	//Monate
	if($diff >= ($month*2))
	{
			echo ((integer)($diff/$month))." Monate ";
			$rS = $rS . ((integer)($diff/$month))." Monate ";
			$diff =$diff - ($month*(integer)($diff/$month));
	}
	else
	{
		if($diff >= $month)
		{
			echo ((integer)($diff/$month))." Monat  ";
			$rS = $rS ((integer)($diff/$month))." Monat  ";
			$diff =$diff - ($month*(integer)($diff/$month));
		}
		else
		{
		   echo " 0 Monate ";
		   $rS = $rS . " 0 Monate ";
		}
	}
	
	//Tage
	if($diff >= ($day*2))
	{
			echo ((integer)($diff/$day))." Tage ";
			$rS = $rS . ((integer)($diff/$day))." Tage ";
			$diff =$diff - ($day*(integer)($diff/$day));
	}
	else
	{
		if($diff >= $year)
		{
			echo ((integer)($diff/$day))." Tag  ";
			$rS = $rS ((integer)($diff/$day))." Tag  ";
			$diff =$diff - ($day*(integer)($diff/$day));
		}
		else
		{
		   echo " 0 Tage ";
		   $rS = $rS . " 0 Tage ";
		}
	}
	
	//Stunden
	if($diff >= ($hour*2))
	{
			echo ((integer)($diff/$hour))." Stunden ";
			$rS = $rS . ((integer)($diff/$hour))." Stunden ";
			$diff =$diff - ($hour*(integer)($diff/$hour));
	}
	else
	{
		if($diff >= $hour)
		{
			echo ((integer)($diff/$hour))." Stunde"."	";
			$rS = $rS .((integer)($diff/$hour))." Stunde"."	";
			$diff =$diff - ($hour*(integer)($diff/$hour));
		}
		else
		{
		   echo " 0 Stunden ";
		   $rS = $rS . " 0 Stunden ";
		}
	}
	
	//Minuten
	if($diff >= ($minute*2))
	{
			echo ((integer)($diff/$minute))." Minuten"."	";
			$rS = $rS . ((integer)($diff/$minute))." Minuten "."	";
			$diff =$diff - ($minute*(integer)($diff/$minute));
	}
	else
	{
		if($diff >= $year)
		{
			echo ((integer)($diff/$minute))." Minute"."	";
			$rS = $rS ((integer)($diff/$minute))." Minute"."	";
			$diff =$diff - ($minute*(integer)($diff/$minute));
		}
		else
		{
		   echo " 0 Minuten"."	";
		   $rS = $rS . " 0 Minuten "."	";
		}
	}
        // Sekunden
	if($diff == 1)
	{
	   echo $diff." Sekunde  ";
		$rS = $rS .$diff." Sekunde  ";
		$diff = $diff - $diff;
	}
	else
	{
		echo $diff." Sekunden ";
		$rS = $rS .$diff." Sekunden ";
		$diff = $diff - $diff;
	}

   SetValuestring(38243 /*[Mein Haus\Info\links\IPS Uptime\Running   :]*/,$rS);

	if($unixdiff > getValueInteger(40470 /*[Mein Haus\Info\links\IPS Uptime\RecordInteger]*/))
	{
	   setValueString(17681 /*[Mein Haus\Info\links\IPS Uptime\Record     :]*/,$rS);
	   setValueInteger(40470 /*[Mein Haus\Info\links\IPS Uptime\RecordInteger]*/,$unixdiff);
	}
	
	
?>	
	
	
	
	
	
	
	

Moin…

…folgendes Skript lasse ich jede Minute ausführen:


<?php


 $oldDate = IPS_GetUptime();     // das aus DB
 $actDate = time();              						// aktuelles Datum
 $diffDate = ($actDate-$oldDate);         // Differenz berechnen (in Sekunden)

 $days = floor($diffDate / 24 / 60 / 60 );   // Anzahl Tage = Sekunden /24/60/60
 $diffDate = $diffDate - ($days*24*60*60);   // den verbleibenden Rest berechnen = Stunden
 $hours = floor($diffDate / 60 / 60);      // den Stundenanteil herausrechnen
 $diffDate = ($diffDate - ($hours*60*60));
 $minutes = floor($diffDate/60);            // den Minutenanteil
 $diffDate = $diffDate - ($minutes*60);
 $seconds = floor($diffDate);             // die verbleibenden Sekunden


 SetValue(18955 /*[SYSTEM\Server Information\UPTIME\System Uptime]*/,"$days T, $hours Std, $minutes Min");

 //echo "$days Tage, $hours Stunden, $minutes Minuten und $seconds Sekunden";
 
 
?>


Variablen und Ergebnis siehe Screenshot.

Gruß,
Peter

Hallo Gemeinde,

vielen Dank für die ganze Hilfe wieder :slight_smile:

Hier ist nun mein fertiges Script…puh…hat den ganzen Tag gekostet, aber als Anfänger ist man dann stolz wie Oskar :slight_smile:

Das Script wird alle sekunde gestartet, wenn ich wirklich auf der Seite im Webfront bin.
Wenn ich mich woanders im Webfront tummele, dann alle 10 minuten.
So wird der Server nicht unnötig belastet (geht mit meinen Webcams genauso)

Hier mal das Script :
(ich weiß…viel zu lang und umständlich…aber…geht und selbstgemacht ^^)
Unten dann ein Screenshot vom Webfront, „Record“ zeigt an, was die längste Uptime jemals war.

<?

$laststart = date("d.m.Y - H:i:s", IPS_GetUptime());

$unixlaststart = IPS_GetUptime();
$unixnow = strtotime ( 'now' ) . "
";
$unixdiff = ($unixnow-$unixlaststart);

//echo "<font color=\"red\">Test</font>";
//echo "<font color=\"green\">Test</font>";


SetValuestring(24224 /*[Mein Haus\Info\links\IPS Uptime\Last Start :]*/,"<font color=\"green\">$laststart</font>");


$diff 	= $unixdiff;
$minute 	= 60;
$hour 	= $minute*60;
$day  	= $hour * 24;
$month 	= $day*365/12;
$year    = $day * 365;

$rS = ""; //runningSince

	//Jahre
	
	$e = (integer)($diff/$year);
	
	if($diff >= 10*$year)
	{
			echo "<font color=\"red\">$e</font>"."<font color=\"green\"> Y. </font>";
			$rS = $rS . "<font color=\"red\">$e</font>"."<font color=\"green\"> Y. </font>";
			$diff =$diff - ($year*(integer)($diff/$year));
	}
	else
	{
		if($diff >= $year)
		{
			echo "<font color=\"red\">0</font>".$e."<font color=\"green\"> Y. </font>";
			$rS = $rS."<font color=\"red\">0</font>".$e."<font color=\"green\"> Y.  </font>";
			$diff =$diff - ($year*(integer)($diff/$year));
		}
		else
		{
		   echo "<font color=\"red\">00 </font>"."<font color=\"green\">Y.</font>";
		   $rS = $rS . "<font color=\"red\">00 </font>"."<font color=\"green\">Y.</font>";
		}
	}
	
	//Monate
	
	$d =(integer)($diff/$month);
	
	if($diff >= ($month*10))
	{
			echo "<font color=\"red\">$d</font>"."<font color=\"green\"> M. </font>";
			$rS = $rS . "<font color=\"red\">$d</font>"."<font color=\"green\"> M. </font>";
			$diff =$diff - ($month*(integer)($diff/$month));
	}
	else
	{
		if($diff >= $month)
		{
			echo "<font color=\"red\">0</font>"."$d"."<font color=\"green\"> M. </font>";
			$rS = $rS."<font color=\"red\">0</font>"."$d"."<font color=\"green\"> M. </font>";
			$diff =$diff - ($month*(integer)($diff/$month));
		}
		else
		{
		   echo "<font color=\"red\"> 00</font>"."<font color=\"green\"> M. </font>";
		   $rS = $rS . "<font color=\"red\"> 00</font>"."<font color=\"green\"> M. </font>";
		}
	}
	
	//Tage
	
	$c = (integer)($diff/$day);
	
	if($diff >= ($day*10))
	{
			echo "<font color=\"red\">$c</font>"."<font color=\"green\"> D. </font>";
			$rS = $rS . "<font color=\"red\">$c</font>"."<font color=\"green\"> D. </font>";
			$diff =$diff - ($day*(integer)($diff/$day));
	}
	else
	{
		if($diff >= $day)
		{
			echo "<font color=\"red\">0"."<font color=\"red\">$c</font>"."<font color=\"green\"> D. </font>";
			$rS = $rS."<font color=\"red\">0"."<font color=\"red\">$c</font>"."<font color=\"green\"> D. </font>";
			$diff =$diff - ($day*(integer)($diff/$day));
		}
		else
		{
		   echo "<font color=\"red\"> 00 </font>"."<font color=\"green\">D. </font>"."<font color=\"grey\">and </font>";
		   $rS = $rS . "<font color=\"red\"> 00 </font>"."<font color=\"green\">D. </font>"."<font color=\"grey\">and </font>";
		}
	}
	
	//Stunden
	
	$b = (integer)($diff/$hour);
	
	if($diff >= ($hour*10))
	{
			echo "<font color=\"red\">$b</font>"."<font color=\"green\"> H. </font>";
			$rS = $rS . "<font color=\"red\">$b</font>"."<font color=\"green\"> H. </font>";
			$diff =$diff - ($hour*(integer)($diff/$hour));
	}
	else
	{
		if($diff >= $hour)
		{
			echo "<font color=\"red\">0</font>"."<font color=\"red\">$b</font>"."<font color=\"green\"> H. </font>";
			$rS = $rS ."<font color=\"red\">0</font>"."<font color=\"red\">$b</font>"."<font color=\"green\"> H. </font>";
			$diff =$diff - ($hour*(integer)($diff/$hour));
		}
		else
		{
		   echo "<font color=\"red\"> 00 </font>"."<font color=\"green\">H. </font>";
		   $rS = $rS . "<font color=\"red\"> 00 </font>"."<font color=\"green\">H. </font>";
		}
	}
	
	//Minuten
	
	$a = (integer)($diff/$minute);
	
	if($diff >= ($minute*10))
	{
			echo "<font color=\"red\">$a</font>"."<font color=\"green\"> Min. </font>";
			$rS = $rS ."<font color=\"red\">$a</font>"."<font color=\"green\"> Min. </font>";
			$diff =$diff - ($minute*(integer)($diff/$minute));
	}
	else
	{
		if($diff >= $minute)
		{
		   
			echo "<font color=\"red\">$a</font>"."<font color=\"green\"> Min. </font>";
			$rS = $rS."<font color=\"red\">0</font>"."<font color=\"red\">$a</font>"."<font color=\"green\"> Min. </font>";
			$diff =$diff - ($minute*(integer)($diff/$minute));
		}
		else
		{
		   echo "<font color=\"red\"> 00 </font>"."<font color=\"green\">Min. </font>";
		   $rS = $rS . "<font color=\"red\"> 00 </font>"."<font color=\"green\">Min. </font>";
		}
	}
	// Sekunden
	if($diff >= 10)
	{
	   echo "<font color=\"red\">$diff</font>"."<font color=\"green\"> Sec. </font>";
		$rS = $rS ."<font color=\"red\">$diff</font>"."<font color=\"green\"> Sec. </font>";
		$diff = $diff - $diff;
	}
	else
	{
		echo "<font color=\"red\">0</font>"."<font color=\"red\">$diff</font>"."<font color=\"green\"> Sec. </font>";
		$rS = $rS."<font color=\"red\">0</font>"."<font color=\"red\">$diff</font>"."<font color=\"green\"> Sec. </font>";
		$diff = $diff - $diff;
	}

	
	
	
   SetValuestring(38243 /*[Mein Haus\Info\links\IPS Uptime\Running   :]*/,$rS);

	if($unixdiff > getValueInteger(40470 /*[Mein Haus\Info\links\IPS Uptime\RecordInteger]*/))
	{
	   setValueString(17681 /*[Mein Haus\Info\links\IPS Uptime\Record     :]*/,$rS);
	   setValueInteger(40470 /*[Mein Haus\Info\links\IPS Uptime\RecordInteger]*/,$unixdiff);
	}
	
	


?>

Liebe Grüße
Sascha