Zur Navigation

Schleife

1 Frank

Hi Jörg!

Ich habe eine Formel die mir die Anzahl an Minuten ausrechnet. Nun möchte ich eine automatische Abfrage generieren die dies vereinfacht. Momentan wird eine Abfrage durchlaufen:

if ($minuten_gesamt >= "60" AND $minuten_gesamt <= "119")
{
    $test = date($minuten_gesamt-60) ;
    $zeit = $stunden_gesamt+1 ;

    if ($minuten_gesamt <= "69")
    {
    $zeitgesamt = $zeit.':0'.$test.':00' ;
    }
    else
    {
    $zeitgesamt = $zeit.':'.$test.':00' ;
    }
}
elseif ($minuten_gesamt >= "120" AND $minuten_gesamt <= "179")
{
    $test = date($minuten_gesamt-120) ;
    $zeit = $stunden_gesamt+2 ;

    if ($minuten_gesamt <= "129")
    {
    $zeitgesamt = $zeit.':0'.$test.':00' ;
    }
    else
    {
    $zeitgesamt = $zeit.':'.$test.':00' ;
    }
}
elseif ($minuten_gesamt >= "180" AND $minuten_gesamt <= "239")
{
    $test = date($minuten_gesamt-180) ;
    $zeit = $stunden_gesamt+3 ;

    if ($minuten_gesamt <= "189")
    {
    $zeitgesamt = $zeit.':0'.$test.':00' ;
    }
    else
    {
    $zeitgesamt = $zeit.':'.$test.':00' ;
    }
}

...

Ich möchte diese Abfrage nicht immer weiter ausweiten. Kann man die Abfrage vereinfachen egal welche Anzahl an $minuten_gesamt ich habe?

12.12.2007 16:04

2 Jörg Kruse

Hallo Frank,

wenn ich das richtig sehe, verwendest du die Schleife, um aus den Gesamt-Minuten die Stunden und verblieben Minuten zu errechnen? Das könntest du auch folgendermaßen:

$stunden_gesamt = floor($minuten_gesamt / 60);
$rest_minuten = $minuten_gesamt % 60;

12.12.2007 17:01

3 Frank

Hi Jörg!

Ja, aber ich möchte dann ja auch die entsprechenden Stunden erhöht haben die sich aus dem Ergebnis ergeben.(siehe Vorgabe)

Ich habe eine Spalte mit Stunden und eine Spalte mit Minuten. Diese werden dann jeweils zusammengezählt. Die Minuten (Gesamtanzahl) soll dann addiert werden. Daher muss dann die Minutenanzahl umgerechnet werden und anschließend addiert werden.

Meine Formatvorlage erkennst du dann ja unter $zeitgesamt

Hast du einen Lösungsvorschlag?

12.12.2007 17:45

4 Jörg Kruse

Ja, aber ich möchte dann ja auch die entsprechenden Stunden erhöht haben die sich aus dem Ergebnis ergeben.(siehe Vorgabe)

In deiner Vorgabe hast du die Stundenanzahl abhängig von der Minutenanzahl errechnet. Genau das tut meine Gleichung ja auch. Aber es geht aus deinem Beispiel nicht hervor, welchen Anfangswert $stunden_gesamt hat - ich war davon ausgegangen 0? Wenn ja, dann musst du nichts mehr addieren, genauso wie du die Schleife nicht mehr benötigst. Zur Verdeutlichung vervollständige ich den Code nochmal etwas:

$stunden_gesamt = floor($minuten_gesamt / 60);
$rest_minuten = $minuten_gesamt % 60;

$test = date($rest_minuten);
$zeit = $stunden_gesamt;

floor() + Division bzw. der Modulus-Operator (%) errechnen das, was du etwas umständlicher mithilfe der Schleife errechnet hast

12.12.2007 18:23 | geändert: 12.12.2007 18:27

5 Frank

Hi Jörg!

Wie geschrieben wird eine Summe gezogen aus einer Tabellenspalte "Stunden" (Ergebnis: $stunden_gesamt) und aus "Minuten" (Ergebnis: $minuten_gesamt). Als Ergebnis erhalte ich dann z.B. Stunden = 12 und Minuten = 2345.

Daher hat Stunden ($stunden_gesamt) meist einen Inhalt. Die Minuten müssen daher umgerechnet und die vollen Stunden addiert werden, wie sieht denn dann der vollständige Code dafür aus ohne das ich dann eine solch unnötige Abfrage erstellen muss?

Zweite Frage, das Ergebnis:

$test = date($minuten_gesamt-120) ;
$zeit = $stunden_gesamt+2 ;

   if ($minuten_gesamt <= "129")
   {
   $zeitgesamt = $zeit.':0'.$test.':00' ;
   }
   else
   {
   $zeitgesamt = $zeit.':'.$test.':00' ;
   }

Soll dann ja entsprechend formatiert ausgegeben werden (Format: 19:08:00 wenn Minuten kleiner als 10) oder (Format: 19:19:00 wenn Minuten größer als 10) siehe $zeitgesamt.

Sorry, aber evtl. hatte ich mich falsch ausgedrückt. ;-)

Gruß Frank

12.12.2007 19:53

6 Jörg Kruse

Wie geschrieben wird eine Summe gezogen aus einer Tabellenspalte "Stunden" (Ergebnis: $stunden_gesamt) und aus "Minuten" (Ergebnis: $minuten_gesamt). Als Ergebnis erhalte ich dann z.B. Stunden = 12 und Minuten = 2345.

In dem Fall müssen die 12 Stunden halt noch hinzugezählt werden:

$stunden_gesamt = $stunden_gesamt + floor($minuten_gesamt / 60);
$rest_minuten = $minuten_gesamt % 60;

$test = date($rest_minuten);
$zeit = $stunden_gesamt;

Soll dann ja entsprechend formatiert ausgegeben werden (Format: 19:08:00 wenn Minuten kleiner als 10) oder (Format: 19:19:00 wenn Minuten größer als 10) siehe $zeitgesamt.

Dann ist mir nicht ganz klar, wozu du date() dann noch benötigst? Das wäre auch eine Möglichkeit, die Umwandling ist in deinem Code dann aber doppelt gemoppelt?

Bei der abschließenden Formatierung hilft ansonsten sprintf().

Ich würde es so probieren:

$stunden_gesamt = $stunden_gesamt + floor($minuten_gesamt / 60);
$rest_minuten = $minuten_gesamt % 60;

$rest_minuten = sprintf("%02d", $rest_minuten);
$zeitgesamt = $stunden_gesamt . ':' . $rest_minuten . ':00';

... oder halt mit date() arbeiten...

(Edit: date() ist vielleicht doch weniger geeignet, da damit Zeitpunkte und nicht Zeitspannen ausgegeben werden)

12.12.2007 20:29 | geändert: 12.12.2007 20:48

7 Frank

Hi Jörg!

Ja, ich bin halt ein Anfänger! ;-)

Und wie erstelle ich dann die Schleife ob die Restminuten kleiner als 10 sind? Dann muss ja eine andere Ausgabe erfolgen (Einmal 03 oder 13)?

Dein Codevorschlag würde dann meine Abfragen (meinen Code am Anfang) ersetzen?

13.12.2007 14:31

8 Jörg Kruse

Hallo Frank,

der zweite Codeblock in Beitrag 6 soll den gesamten Code in Beitrag 1 ersetzen :)

Und wie erstelle ich dann die Schleife ob die Restminuten kleiner als 10 sind? Dann muss ja eine andere Ausgabe erfolgen (Einmal 03 oder 13)?

Diese Schleife benötigst du nicht mehr; in der dritten Zeile wird $rest_minuten mittels sprintf() als zweistellige Zahl formatiert; eine "3" wird entsprechend hiernach als "03" ausgegeben

13.12.2007 15:10 | geändert: 13.12.2007 15:13

9 Frank

Hi Jörg!

Danke so hatte ich mir das vorgestellt!

Gruß Frank

13.12.2007 16:19

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]