php Differenz zwischen zwei Zahlen - Ergebnis: "0"

Meteorologe

Ensign
Registriert
Aug. 2006
Beiträge
254
Hallo,
ich würde erneut die Hilfe von euch benötigen.

Wenn ich eine Differenz zwischen zwei Werten ausrechnen möchte, verwende ich

PHP:
$aDiff = floor((seconds_from_hms($aTimeR) - seconds_from_hms($aTimeS))/60);

Nun ist das Problem, dass nicht in jedem "aTimeR" ein Wert vorhanden ist. Sobald kein Wert da ist, wird der fehlende Wert als die Zahl "0" gedacht. Ich erhalte dadurch sehr "merkwürdige" Ergebnisse. Wenn sowohl bei "aTimeR", als auch bei "aTimeS" nichts steht, bekomme ich das Ergebnis "0"
Mit "null;" komme ich nicht weiter, da sich an der Ausgabe nichts verändert.
Ich würde mir wünschen, wenn sich in "aTimeR" bzw. in "aTimeS" keine Zahl befindet, nichts berechnet wird. Ist dies irgendwie möglich?

Danke für die Hilfe
Gruß
Simon
 
Hi,
seconds_from_hms kenn ich jetzt nicht. Aber Du kannst ja vor der Berechnung abfragen, ob in $aTimeR oder $aTimeS etwas drin ist und dann erst deine Berechnung machen.
 
in php wird der typ implizit interpretiert wenn man nichts macht.

das bedeutet das z.b. eine zahl automatisch in einen string gewandelt wird wenn der string operator "." zum einsatz kommt....etc.

deswegen gibt es "==" und "==="
(1 == true) ergibt true, da 1 als true gewandelt wird ganz implizit
(1 === true) ergibt false, hier wird nichts gewandelt daher falsch, die zahl 1 ist nich gleich true

würde das php nicht automatisch machen würdest du einen fehler bekommen. das bringt dir ja auch nichts.
also musst du das logischerweise irgendwie handhaben mit if oder so
 
Danke für die flotten Antworten. Dann werde ich mich mal in der Nacht mit "if" auseinander setzen ^^
 
Meine etwas amateurhafte Zusammenbastelei hat folgendes gebracht:

PHP:
if ($aTimeS == null ) {} 
else {$aDiff = floor((seconds_from_hms($aTimeR) - seconds_from_hms($aTimeS))/60); }

Es funktioniert grundsätzlich, nur sobald das erste mal eine Zahl bei aTimeS auftaucht, füllt die ausgerechnete Zahl die ganzen Spalteneinträge von der ausgerechneten Differenz, bis zum nächsten Eintrag von aTimeS.
So sieht es derzeit aus:

aTimeS aTimeR ->
aTimeS aTimeR ->
aTimeS 00:01 aTimeR 00:02 -> 1
aTimeS aTimeR -> 1
aTimeS aTimeR -> 1
aTimeS aTimeR -> 1
aTimeS 00:05 aTimeR 00:09 -> 4
aTimeS aTimeR -> 4
aTimeS aTimeR -> 4
aTimeS aTimeR -> 4

Wo liegt mein Denkfehler? Hat es eventuell nichts mehr mit der Berechnung zu tun, sondern der Fehler liegt an einem anderen Teil des php Scripts?
 
Zuletzt bearbeitet:
Meteorologe schrieb:
Wo liegt mein Denkfehler?
Wenn $aTimeS == null dann weist Du $aDiff keinen neuen Wert zu. Deshalb solltest Du die Zeile abändern in:
Code:
if ($aTimeS == null ) { $aDiff = null }
bzw. an Stelle von null den Wert, den Du ausgegeben haben willst, wenn $aTimeS gleich null ist.
 
Andreas_ schrieb:
Wenn $aTimeS == null dann weist Du $aDiff keinen neuen Wert zu. Deshalb solltest Du die Zeile abändern in:
Code:
if ($aTimeS == null ) { $aDiff = null }
bzw. an Stelle von null den Wert, den Du ausgegeben haben willst, wenn $aTimeS gleich null ist.

Danke, ja das war es. Vielen Dank für die Hilfe zu so später Stunde.
 

Ähnliche Themen

Antworten
21
Aufrufe
19.958
1668mib
1
Zurück
Oben