Sascha
20. März 2013 um 15:36
1
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 ?
Lieben Gruß
Sascha
khge
20. März 2013 um 16:15
2
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
kronos
20. März 2013 um 16:31
3
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).";
?>
Sascha
20. März 2013 um 21:19
4
Oh…danke Kronos
ich war die letzten Stunden auch nicht ganz untätig
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
Ich finde mein Script VIEL eleganter als deines kronos…bei meinem kann man so schön den Finger am Mausrad trainieren 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
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
Sascha
21. März 2013 um 02:27
6
Hallo Gemeinde,
vielen Dank für die ganze Hilfe wieder
Hier ist nun mein fertiges Script…puh…hat den ganzen Tag gekostet, aber als Anfänger ist man dann stolz wie Oskar
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