Announcement

Collapse
No announcement yet.

Berechnen von Zeitdauern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Berechnen von Zeitdauern

    Hallo,
    ich habe mich durch die verschiedenen Threads zur Zeitberechnung gewühlt, glaube alles richtig zu machen und erhalte doch keine Lösung.
    In meiner Datenbank befinden sich zwei Felder HB (hours begin) und HE (hours end) beide vom Typ time.
    Beide werden in meinem Formular abgefragt. mit dem Ajax-Event onChange auf diese Felder soll die Zeitspanne dazwischen errechnet werden.
    Dafür habe ich das Feld {Dauer} eingerichtet. Das Feld hat den Datentyp Zeit, Anzeigeformat ist hhmm und internes Format steht auf HH:II:SS. Das Feld ist für die manuelle Bearbeitung deaktiviert.
    Jetzt zur Programmierung:

    $dauer = sc_time_diff({HE},"HH:II",{HB},"HH:II");
    sc_ajax_message('Dauer',$dauer);
    {Dauer} = $dauer;

    Vorne habe ich den höheren Wert eingestellt, hinten den niedrigeren. Ich habe das Zeitformat im Makro in doppelte Anführungszeichen (") gestellt, genauso wie in einfache (').
    Ich erhalte weder die Ajax Message, noch tut sich irgendetwas im Feld Dauer.

    So langsam gehen mir die Ideen aus, was ich noch falsch gemacht haben könnte.

    Wahrscheinlich werde ich, wenn ich das Problem gelöst habe, auch noch daran knobeln wie ich eine Dauer bestimmen kann, die über 0 Uhr hinaus geht.
    Also beispielsweise von 21:00 Uhr bis 3:00 Uhr.
    In der Regel rechne ich das so, dass ich intern vorne 12 h abziehe und hinten 12 h hinzu addiere. Also 9:00 und 15:00. Die Differenz wäre in dem Fall auch wieder 6 h.
    Kann mir jemand dazu helfen?

    (Zusatzfrage: In dem Zeitfeld würde ich gerne auch einstellige Stunden eingeben können. Wenn ich beispielsweise 9:00 Uhr eingebe, muss ich 0900 eingeben. Wenn ich 900 eingebe, kommt 90:0 und dann eine Fehlermeldung.
    Bei Dezimalzahlen gibt es dafür das Feld, Automatisches Auffüllen mit Nullen. Gibt es da einen Workaround zu?

  • #2
    Hi,
    vergiss das sc_time_diff() Makro und verwende PHP.
    Solange Du nur Uhrzeiten verwendest (also ohne Datumsanteil) muss Du den
    Datumswechsel selbst händeln. Ist aber mit PHP kein Problem

    Code:
    $start = new DateTime({HB});
    $ende =	new DateTime({HE});
    if($ende < $start)
    {
    	$ende->add(new DateInterval('P1D'));
    }
    {Dauer} =  $start->diff($ende)->format('%H:%I');
    Für die Eingabe gibt es, soweit mir bekannt, keine Lösung.

    jsb

    Comment


    • #3
      Hallo PKreutz,

      nur so als Tip !

      Wenn Du hier mehr Antworten oder vielleicht auch schnellere haben willst, solltest Du Deine Anfragen in Englisch formulieren !

      Comment


      • #4
        Lieber Gerd, danke für den Hinweis. Im Moment bin ich sehr zufrieden mit den Antworten. Aber ansonsten springe ich ins Englische. Da ich mich aber noch sehr tastend durch scriptcase bewege, bin ich ganz froh auch mal Deutsch fragen zu können.

        Comment


        • #5
          @jsbinca Ok, sc_time_diff() ist abgehakt. Was die Eingabe angeht, habe ich mir das hier zusammen gebastelt:

          $zeit = str_replace(":", "", {Test-Zeit}); // Zeit im Format hhmm
          $lng = strlen({Test-Zeit});

          if ($lng < 5)
          {
          for($a = 5; $a > $lng; $a--)
          {
          $zeit = '0'.$zeit;
          }
          }
          {Test-Zeit} = substr($zeit,0,2).':'.substr($zeit, -2);
          Das funktioniert soweit ganz gut. - Einziges kosmetisches Manko. Die Rotfärbung der scheinbaren Falscheingabe bleibt.

          Comment

          Working...
          X