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?

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


$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

Hallo PKreutz,

nur so als Tip !

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

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.

@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.