Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Zeitausgabe gerundet [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Zeitausgabe gerundet


 
Luthiels
10-03-2008, 11:27 
 
ich möchte für ein kleines Sicherheitssystem u.a. einen Zeitstempel übergeben von einem Server zum nächsten.

Damit beide nicht immer 100% synchron laufen müssen, soll der übergebene Zeitstempel gerundet sein auf 5 min

Also:
Login um 10:50 Uhr -> Übergabezeit = 1050
Login um 10:51 Uhr -> Übergabezeit = 1050
Login um 10:52 Uhr -> Übergabezeit = 1050
Login um 10:53 Uhr -> Übergabezeit = 1055
Login um 10:54 Uhr -> Übergabezeit = 1055
Login um 10:55 Uhr -> Übergabezeit = 1055

nun kenn ich zwar die Date() - Funktion und auch round() etc, aber mit fällt nichts ein, wie ich einen sauberen 5 Minuten takt hinbekomme.

Habt Ihr Ideen? Notfalls auch Umwege? Ich bin nämlich nicht soo der PHP Crack..

 
jahlives
10-03-2008, 11:52 
 
function returnRoundTime($timestamp){
$time = explode(':',date('H:i',$timestamp));
if($time[1][1] == 5){
return $time;
}else{
if($time[1][1] < 3){
$time[1][1] = '0';
}else{
$time[1][1] = '5'
}
}
return $time;
}

so in der Richtung würde ich das mal probieren

Gruss

tobi

 
H2O
10-03-2008, 13:08 
 
Oder
$gerundet = 100 * (round(($minuten / 100) * 20) / 20);

 
Luthiels
10-03-2008, 13:56 
 
Danke euch beiden!

aber beides klappt nicht so ganz... :rolleyes:

Ersteres springt bei 10:18 Uhr nicht auf "1020".

Und beide Ideen berücksichtigen nur die Minuten. Was aber ist um 11:58 Uhr? Ich selbst habe aber auch noch nichts gefunden.. :dontknow:

 
jahlives
10-03-2008, 14:19 
 
function returnRoundTime($timestamp){
$time = date('i',$timestamp);
if($time[1] < 3){
return $timestamp - $time[1]*60;
}elseif($time[1] > 2 && $time[1] < 5){
return $timestamp + (5-$time[1])*60;
}elseif($time[1] == 5){
return $timestamp;
}elseif($time[1] > 5 && $time[1] < 8){
return $timestamp - ($time[1]-5)*60;
}elseif($time[1] > 5 && time[1] > 7){
return timestamp + (10-$time[1])*60;
}
}

Mal so probiert? Du musst dann den return einfach noch mit date() in die gewünschte Form bringen. Hoff, dass ich diesmal alle Fälle abgedeckt habe ;)

Gruss

tobi

 
H2O
10-03-2008, 14:50 
 
Ich bin eigentlich davon ausgegengen, dass du das Aufteilen und Zusammenfügen von Stunden und Minuten selber schaffst. Und der andere Fall ist mit tatsächlich entgangen, da ich die 5er Rundung sonst vor allem im Zusmmenhang mit Geldbeträgen benutzt habe. So seis halt:function roundMin($zeit){
list($stunden, $minuten) = explode(':', $zeit);

$minuten = 100 * (round(($minuten / 100) * 20) / 20);
if ($minuten == 60){
$stunden ++;
$minuten = 0;
if ($stunden == 24){
$stunden = 0;
}
}
return sprintf("%02d%02d", $stunden, $minuten);
}

 
Luthiels
10-03-2008, 15:34 
 
Original geschrieben von jahlives

function returnRoundTime($timestamp){
$time = date('i',$timestamp);
if($time[1] < 3){
return $timestamp - $time[1]*60;
}elseif($time[1] > 2 && $time[1] < 5){
return $timestamp + (5-$time[1])*60;
}elseif($time[1] == 5){
return $timestamp;
}elseif($time[1] > 5 && $time[1] < 8){
return $timestamp - ($time[1]-5)*60;
}elseif($time[1] > 5 && time[1] > 7){
return timestamp + (10-$time[1])*60;
}
}

Mal so probiert? Du musst dann den return einfach noch mit date() in die gewünschte Form bringen. Hoff, dass ich diesmal alle Fälle abgedeckt habe ;)

Gruss

tobi

Vielen Dank für's neu machen!

Hier scheint er allerdings Probleme bei Minute 3 und 4 zu haben (oder auch 23, 24) Auch weiss ich nicht, was der letzte elseif abfragt. >5 und >7 ..

Alles andere klappt wunderbar. auch mit der Folgestunde.

---------------------------------------------


Original geschrieben von H2O
Ich bin eigentlich davon ausgegengen, dass du das Aufteilen und Zusammenfügen von Stunden und Minuten selber schaffst. Und der andere Fall ist mit tatsächlich entgangen, da ich die 5er Rundung sonst vor allem im Zusmmenhang mit Geldbeträgen benutzt habe. So seis halt:function roundMin($zeit){
list($stunden, $minuten) = explode(':', $zeit);

$minuten = 100 * (round(($minuten / 100) * 20) / 20);
if ($minuten == 60){
$stunden ++;
$minuten = 0;
if ($stunden == 24){
$stunden = 0;
}
}
return sprintf("%02d%02d", $stunden, $minuten);
}

Danke dir sehr! Bisher klappt das so.. was ich noch nicht genau weiss, sind die Minuten vor der nächsten Stunde.. aber in 30 min wissen wir mehr.. ;)

 
jahlives
10-03-2008, 15:56 
 
Hier scheint er allerdings Probleme bei Minute 3 und 4 zu haben (oder auch 23, 24) Auch weiss ich nicht, was der letzte elseif abfragt. >5 und >7 ..

Eigentlich sollte dieser Fall doch im 1. elseif abgehandelt werden :dontknow:
Der letzte Fall fängt die Fälle ab in denen auf einer 10-er aufgerundet werden sollte.

 
Luthiels
10-03-2008, 16:05 
 
Original geschrieben von H2O
Ich bin eigentlich davon ausgegengen, dass du das Aufteilen und Zusammenfügen von Stunden und Minuten selber schaffst. Und der andere Fall ist mit tatsächlich entgangen, da ich die 5er Rundung sonst vor allem im Zusmmenhang mit Geldbeträgen benutzt habe. So seis halt:function roundMin($zeit){
list($stunden, $minuten) = explode(':', $zeit);

$minuten = 100 * (round(($minuten / 100) * 20) / 20);
if ($minuten == 60){
$stunden ++;
$minuten = 0;
if ($stunden == 24){
$stunden = 0;
}
}
return sprintf("%02d%02d", $stunden, $minuten);
}


Diese Idee schafft auch den Stundenwechsel..

Danke!

Beiden, wohl gemerkt!
.. Eure Köpfe möcht' ich manches mal haben ;)

 
jahlives
10-03-2008, 16:08 
 
Diese Idee schafft auch den Stundenwechsel..

Schafft aber meine Idee auch *heul heul* ;)
Nur musst du bei meiner Version den Timestamp mit date() wieder in die gewünschte Form bringen

 
H2O
10-03-2008, 16:15 
 
Original geschrieben von Luthiels
Diese Idee schafft auch den Stundenwechsel.. Die schafft auch den Tageswechsel

Original geschrieben von jahlives
Nur musst du bei meiner Version den Timestamp mit date() wieder in die gewünschte Form bringenund vorher zuerst in einen Timestamp umwandeln.
Aber nicht traurig sein:rocks:

 
Luthiels
10-03-2008, 17:03 
 
Original geschrieben von H2O
Die schafft auch den Tageswechsel

ich hatte nicht vor, das heute auszutesten und glaube es ungesehen :D


Danke Euch beiden!


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:22 Uhr.