PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks. |
 |

10-03-2008, 12:27
|
Luthiels
Newbie
|
|
Registriert seit: Mar 2008
Beiträge: 5
|
|
Zeitausgabe gerundet
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..
|

10-03-2008, 12:52
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
|
|
PHP-Code:
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
|

10-03-2008, 14:08
|
H2O
PHP Junior
|
|
Registriert seit: Jul 2007
Beiträge: 937
|
|
Oder
PHP-Code:
$gerundet = 100 * (round(($minuten / 100) * 20) / 20);
__________________
Gruss
H2O
|

10-03-2008, 14:56
|
Luthiels
Newbie
|
|
Registriert seit: Mar 2008
Beiträge: 5
|
|
Danke euch beiden!
aber beides klappt nicht so ganz...
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..
|

10-03-2008, 15:19
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
|
|
PHP-Code:
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
Geändert von jahlives (10-03-2008 um 15:40 Uhr)
|

10-03-2008, 15:50
|
H2O
PHP Junior
|
|
Registriert seit: Jul 2007
Beiträge: 937
|
|
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:
PHP-Code:
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);
}
__________________
Gruss
H2O
|

10-03-2008, 16:34
|
Luthiels
Newbie
|
|
Registriert seit: Mar 2008
Beiträge: 5
|
|
Zitat:
Original geschrieben von jahlives
PHP-Code:
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.
---------------------------------------------
Zitat:
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:
PHP-Code:
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..
|

10-03-2008, 16:56
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
|
|
Zitat:
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 
Der letzte Fall fängt die Fälle ab in denen auf einer 10-er aufgerundet werden sollte.
|

10-03-2008, 17:05
|
Luthiels
Newbie
|
|
Registriert seit: Mar 2008
Beiträge: 5
|
|
Zitat:
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:
PHP-Code:
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
|

10-03-2008, 17:08
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
|
|
Zitat:
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
|

10-03-2008, 17:15
|
H2O
PHP Junior
|
|
Registriert seit: Jul 2007
Beiträge: 937
|
|
Zitat:
Original geschrieben von Luthiels
Diese Idee schafft auch den Stundenwechsel..
|
Die schafft auch den Tageswechsel
Zitat:
Original geschrieben von jahlives
Nur musst du bei meiner Version den Timestamp mit date() wieder in die gewünschte Form bringen
|
und vorher zuerst in einen Timestamp umwandeln.
Aber nicht traurig sein
__________________
Gruss
H2O
|

10-03-2008, 18:03
|
Luthiels
Newbie
|
|
Registriert seit: Mar 2008
Beiträge: 5
|
|
Zitat:
Original geschrieben von H2O
Die schafft auch den Tageswechsel
|
ich hatte nicht vor, das heute auszutesten und glaube es ungesehen
Danke Euch beiden!
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|