ERLEDIGT
NEIN
NEIN
ANTWORTEN
9
9
ZUGRIFFE
1226
1226
EMPFEHLEN
-
20.07.08 14:54 #1
- Registriert seit
- Jan 2007
- Beiträge
- 258
Hi,
ich habe mir eine kleine Funktion gebastelt die Sekunden in Minuten und Stunden umrechnen und ausgeben soll. Wichtig dabei ist, dass wenn eine Minute angebrochen wird (d.h. die verbleibenden Sekunden > 0 sind) diese als volle Minute gezählt werden soll.
Ich denke ich habe eine Lösung gefunden, bin mir jedoch nicht sicher ob diese korrekt und gegen alle Eventualitäten gewappnet ist. Daher würde ich euch die Funktion gerne hier zeigen und bitten mal drüber zu schauen. Falls jemanden etwas auffällt oder einen Fehler entdeckt, bitte posten.
Falls alles ok sein sollte, würde ich die Funktion auch in den Code Schnipsel Bereich zur Verfügung stellen...
Hier nun die Funktion:
PHP-Code:// start und ende sind Timestamps aus der Datenbank
$start = 1216541758;
$ende = 1216570520;
// Berechne die Zeitspanne zwischen start und ende in sekunden...
$differenz = $ende-$start;
function secToAll($sekunden) // der Funktion wird die Zeit in Sekunden übergeben
{
// Berechne wieviele volle stunden sich aus den übergebenen Sekunden ergeben
$stunden_grob = $sekunden / 3600;
$stunden_extract = explode('.',$stunden_grob); // Hier werden nun die vollen Stunden extrahiert
$stunden = $stunden_extract[0]; // Hier stehen nun die vollen Stunden
$restliche_minuten = $sekunden%3600; // Ermittle nun die verbleibenden Minuten
$minuten_grob = $restliche_minuten /60;
$minuten_extract = explode('.',$minuten_grob); // Hier werdenn un die vollen Minuten extrahiert
$minuten = $minuten_extract[0]; // Hier stehen nun die vollen Minuten
$restliche_sekunden = $restliche_minuten % 60; // Berechne die verbleibenden Sekunden
if($restliche_sekunden>0) // Wenn eine neue Minute angebrochen wurde soll diese als Ganze zählen
{
$minuten++; // Anzahl Minuten wird erhöht
if($minuten == 60) {$minuten = 0; $stunden++;} // Prüfe nun ob die Anzahl der Minuten = 60 ist (Dies wäre eine volle Stunde) Daher wird Minuten auf 0 gesetzt und Stunden um 1 erhöht
}
echo "Stunden: " . $stunden . " Minuten: " . $minuten;
}
secToAll($differenz); // Aufruf der Funktion
-
Das kannst du eigentlich recht gut selbst testen, indem du Testfälle aufstellst. Also mögliche Eingabewerte und erwartete Ausgabewerte. Beispielsweise:
Code :1 2 3 4 5 6 7 8 9 10 11 12
+-------------+------------------+ | Eingabewert | erw. Ausgabewert | +-------------+------------------+ | 0 | 0:0 | | 1 | 0:1 | | 59 | 0:1 | | 60 | 0:2 | | 61 | 0:2 | | 3599 | 0:59 | | 3600 | 1:0 | | … | … | +-------------+------------------+
Markus Wulftange
-
20.07.08 15:30 #3
- Registriert seit
- Jan 2007
- Beiträge
- 258
Habe es mal durchlaufen lassen, folgende Abweichungen habe ich festgestellt:
Code :1 2 3 4 5 6 7 8 9 10 11 12
+-------------+------------------+ | Eingabewert | erw. Ausgabewert | +-------------+------------------+ | 0 | 0:0 | | 1 | 0:1 | | 59 | 0:1 | [COLOR="Red"]| 60 | 0:1 |[/COLOR] | 61 | 0:2 | [COLOR="red"]| 3599 | 1:0 |[/COLOR] | 3600 | 1:0 | | … | … | +-------------+------------------+
D.h. meine Funktion würde nicht ordnungsgemäß arbeiten?
Falls jemand eine besser Lsg oder Verbesserungen hat, bin ganz Ohr
-
Was wäre denn richtig?
Markus Wulftange
-
So wie ich das sehe ist das vollkommen richtig.
Du möchtest jede angebrochene Minute als eine Volle zählen, genau das wird getan.
Wäre bei einem Eingabewert von "60" das Ergebniss "0:2", würden zwei Minuten gezählt werden, was definitiv falsch wäre.
Oder habe ich Tomaten auf den Augen?
-
Genau genommen wird die erste Minute bereits bei 0 angebrochen und endet bei 59.
Markus Wulftange
-
Im Grunde schon.
Ist die Frage, ob die Funktion auch 0 Minuten als Ergebniss zurück geben darf oder nicht.
-
Ich habe mal etwas ähnliches gebraucht um das Alter von Personen zu berechnen und dabei folgendes gefunden:
Finde ich sehr geil die Lösung (Nicht ganz genau wegen Schaltjahren etc.)PHP-Code:function intervall($sek) {
$i = sprintf('%d Jahr%s, %d Tag%s, %d Stunde%s',
// Jahre
$sek / 31536000,
floor($sek / 31536000) != 1 ? 'e':'',
// Tage
$sek / 86400 % 365,
floor($sek / 86400 % 365) != 1 ? 'e':'',
// Stunden
$sek / 3600 % 24,
floor($sek / 3600 % 24) != 1 ? 'n':''
);
return $i;
}

Das müsste mal doch auf jeden Fall auch für Minuten und Sekunden umschreiben können
lg
-
Hier so würds denke ich klappen

gibt:PHP-Code:$times = array(0, 1, 10, 59, 60, 250, 300, 900, 3600, 12342, 542842);
function seksplit($sek) {
$i = sprintf('%d Stunde%s %d Minute%s %d Sekunde%s',
// Stunden
$sek / 3600,
floor($sek / 3600) != 1 ? 'n' : '',
// Minuten
$sek / 60 % 60,
floor($sek / 60 % 60) != 1 ? 'n' : '',
// Sekunden
$sek % 60,
floor($sek % 60) != 1 ? 'n' : ''
);
return $i;
}
foreach ($times as $time) {
echo $time.' = '.seksplit($time).'<br>';
}
so geht es auch.0 = 0 Stunden 0 Minuten 0 Sekunden
1 = 0 Stunden 0 Minuten 1 Sekunde
10 = 0 Stunden 0 Minuten 10 Sekunden
59 = 0 Stunden 0 Minuten 59 Sekunden
60 = 0 Stunden 1 Minute 0 Sekunden
250 = 0 Stunden 4 Minuten 10 Sekunden
300 = 0 Stunden 5 Minuten 0 Sekunden
900 = 0 Stunden 15 Minuten 0 Sekunden
3600 = 1 Stunde 0 Minuten 0 Sekunden
12342 = 3 Stunden 25 Minuten 42 Sekunden
542842 = 150 Stunden 47 Minuten 22 Sekunden
EDIT:
Nur die sache mit der verbleibenden Sekunde hab ich vergessen - hier die Lösung:
Ein wenig kürzerPHP-Code:function seksplit($sek) {
$i = sprintf('%d Stunde%s %d Minute%s',
// Stunden
$sek / 3600,
floor($sek / 3600) != 1 ? 'n' : '',
// Minuten
($sek / 60 % 60) + (floor($sek % 60) ? 1 : 0),
floor(($sek / 60 % 60) + (floor($sek % 60) ? 1 : 0)) != 1 ? 'n' : ''
);
return $i;
}

Ausgabe für die selben Werte wie oben:
EDIT Part2:0 = 0 Stunden 0 Minuten
1 = 0 Stunden 1 Minute
10 = 0 Stunden 1 Minute
59 = 0 Stunden 1 Minute
60 = 0 Stunden 1 Minute
250 = 0 Stunden 5 Minuten
300 = 0 Stunden 5 Minuten
900 = 0 Stunden 15 Minuten
3600 = 1 Stunde 0 Minuten
12342 = 3 Stunden 26 Minuten
542842 = 150 Stunden 48 Minuten
Hatte noch nen dicken Fehler drin
Aber nun ist alles behoben!
Es sei denn einem von euch fällt noch was auf?!
lgGeändert von Klein0r (22.07.08 um 12:26 Uhr)
-
Genial wäre es jetzt den ganzen Spies umzudrehen. Also wenn man "01:00" eingibt dass er die Sekunden anzeigt

<< Fat-Z >>Intelligenz ist kein Privileg, sondern eine Gabe!
Ähnliche Themen
-
Sekunden in Stunden:Minuten:Sekunden ausgeben.
Von reeng im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 06.05.09, 08:34 -
Aus Timestamps die Tage, Stunden, Minuten und Sekunden auslesen
Von Papenburger im Forum PHPAntworten: 6Letzter Beitrag: 03.01.08, 11:01 -
Stunden-, Minuten- und Sekunden-Frames rechnen in Excel
Von poolpage im Forum Office-AnwendungenAntworten: 1Letzter Beitrag: 29.11.05, 12:49 -
Funktion: Sekunden --> Jahre, Monate, Tage, Stunden, Minuten, Sekunden
Von Ordi im Forum Javascript & AjaxAntworten: 9Letzter Beitrag: 24.09.04, 17:46 -
Sekunden -> Stunden:Minuten:Sekunden
Von Sputnik im Forum PHPAntworten: 2Letzter Beitrag: 24.10.02, 09:01





Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren