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
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
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
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!
|
|