tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
9
ZUGRIFFE
1226
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    brainsucker brainsucker ist offline Mitglied Brokat
    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 
     

  2. #2
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    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

  3. #3
    brainsucker brainsucker ist offline Mitglied Brokat
    Registriert seit
    Jan 2007
    Beiträge
    258
    Zitat Zitat von Gumbo Beitrag anzeigen
    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 |
    |           … |                … |
    +-------------+------------------+

    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
     

  4. #4
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Was wäre denn richtig?
     
    Markus Wulftange

  5. #5
    DeluXe DeluXe ist offline Funkjoker
    Registriert seit
    Jul 2004
    Ort
    Offenburg
    Beiträge
    847
    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?
     

  6. #6
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Genau genommen wird die erste Minute bereits bei 0 angebrochen und endet bei 59.
     
    Markus Wulftange

  7. #7
    DeluXe DeluXe ist offline Funkjoker
    Registriert seit
    Jul 2004
    Ort
    Offenburg
    Beiträge
    847
    Im Grunde schon.
    Ist die Frage, ob die Funktion auch 0 Minuten als Ergebniss zurück geben darf oder nicht.
     

  8. #8
    Avatar von Klein0r
    Klein0r Klein0r ist offline Mitglied Platin
    Registriert seit
    Sep 2007
    Ort
    Paderborn
    Beiträge
    718
    Ich habe mal etwas ähnliches gebraucht um das Alter von Personen zu berechnen und dabei folgendes gefunden:

    PHP-Code:
    function intervall($sek) {
        
    $i sprintf('%d Jahr%s, %d Tag%s, %d Stunde%s',
                
    // Jahre
                
    $sek 31536000,
                
    floor($sek 31536000) != 'e':'',
                
                
    // Tage
                
    $sek 86400 365,
                
    floor($sek 86400 365) != 'e':'',
                
                
    // Stunden
                
    $sek 3600 24,
                
    floor($sek 3600 24) != 'n':''
             
    );
        return 
    $i;

    Finde ich sehr geil die Lösung (Nicht ganz genau wegen Schaltjahren etc.)
    Das müsste mal doch auf jeden Fall auch für Minuten und Sekunden umschreiben können

    lg
     

  9. #9
    Avatar von Klein0r
    Klein0r Klein0r ist offline Mitglied Platin
    Registriert seit
    Sep 2007
    Ort
    Paderborn
    Beiträge
    718
    Hier so würds denke ich klappen

    PHP-Code:
    $times = array(01105960250300900360012342542842);

    function 
    seksplit($sek) {
        
        
    $i sprintf('%d Stunde%s %d Minute%s %d Sekunde%s',
            
    // Stunden
            
    $sek 3600,
            
    floor($sek 3600) != 'n' '',
            
            
    // Minuten
            
    $sek 60 60,
            
    floor($sek 60 60) != 'n' '',
            
            
    // Sekunden
            
    $sek 60,
            
    floor($sek 60) != 'n' ''
        
    );
        
        return 
    $i;
    }

    foreach (
    $times as $time) {
        echo 
    $time.' = '.seksplit($time).'<br>';

    gibt:
    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
    so geht es auch.

    EDIT:
    Nur die sache mit der verbleibenden Sekunde hab ich vergessen - hier die Lösung:
    PHP-Code:
    function seksplit($sek) {
        
        
    $i sprintf('%d Stunde%s %d Minute%s',
            
    // Stunden
            
    $sek 3600,
            
    floor($sek 3600) != 'n' '',
            
            
    // Minuten
            
    ($sek 60 60) + (floor($sek 60) ? 0),
            
    floor(($sek 60 60) + (floor($sek 60) ? 0)) != 'n' ''
        
    );
        
        return 
    $i;

    Ein wenig kürzer

    Ausgabe für die selben Werte wie oben:
    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
    EDIT Part2:
    Hatte noch nen dicken Fehler drin Aber nun ist alles behoben!
    Es sei denn einem von euch fällt noch was auf?!


    lg
    Geändert von Klein0r (22.07.08 um 12:26 Uhr)
     

  10. #10
    Avatar von Fat-Z
    Fat-Z Fat-Z ist offline Mitglied Bronze
    Registriert seit
    Dec 2006
    Ort
    Bayern
    Beiträge
    37
    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

  1. Sekunden in Stunden:Minuten:Sekunden ausgeben.
    Von reeng im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 06.05.09, 08:34
  2. Antworten: 6
    Letzter Beitrag: 03.01.08, 11:01
  3. Stunden-, Minuten- und Sekunden-Frames rechnen in Excel
    Von poolpage im Forum Office-Anwendungen
    Antworten: 1
    Letzter Beitrag: 29.11.05, 12:49
  4. Antworten: 9
    Letzter Beitrag: 24.09.04, 17:46
  5. Sekunden -> Stunden:Minuten:Sekunden
    Von Sputnik im Forum PHP
    Antworten: 2
    Letzter Beitrag: 24.10.02, 09:01