PHP Fehler in Berechnungsformel?

mikelsdump

Ensign
Registriert
Aug. 2008
Beiträge
133
Hallo zusammen,

ich habe einen Code, der eine Startzeit und eine Endzeit abfrägt (beide jeweils im Format DATETIME).
In einem ersten Schritt wird die Startzeit von der Endzeit abgezogen, man erhält die Nettozeit. Das funktioniert soweit.
In einem zweiten Schritt möchte ich die Nettozeit durch die Anzahl der gefertigten Teile (gespeichert in der Variable $Stueckzahl) teilen. Das funktioniert nicht (siehe Screenshot). Es steht immer (!) 0.00 dort.

Mein Code lautet folgendermaßen:
PHP:
list($Timediff) = mysql_fetch_array($results);
 if ($Stueckzahl !=0) {
$Stueckzeit=number_format($Timediff/$Stueckzahl,2);} ELSE {
$Stueckzeit="n.n.";}

Was habe ich falsch gemacht?:confused_alt:
 

Anhänge

  • Ausgabe.jpg
    Ausgabe.jpg
    23,8 KB · Aufrufe: 211
Du bekommst einen String zurück und keine Zahl. Per strtotime o.Ä. in einen int Wandeln und dann teilen.
 
Ich würde die Zeiten in den Unix Zeitcode umwandeln, dann bekommst du einen Integerwert den du weiterverarbeiten kannst. mktime()

Ich vermute das er Probleme hat Zeiten durch einen Integer oder Floatwert zu teilen?
http://www.schattenbaum.net/php/datum.php
Ist aber nur eine Vermutung, aber mit dem Workaround sollte man es hinbekommen können.
 
Denke dein Problem ist, das du es in einer list speicherst und darin als array.

in dem $Timediff wird also nichts drin stehen was er fuer die rechnung verwerten kann, da solltest ansetzen.
 
...das hört sich jetzt für mich danach an, als ob ich da jetzt nochmal ein Riesen-Fass aufmachen muss für eine eigentlich kleine Sache.

Habe vorhin noch zwei Zeilen beim Posten des Codes vergessen:
PHP:
$query4 = "SELECT TIMEDIFF('$Endzeit','$Startzeit')";
$results =  mysql_query($query4);

list($Timediff) = mysql_fetch_array($results);
 if ($Stueckzahl !=0) {
$Stueckzeit=number_format($Timediff/$Stueckzahl,2);} ELSE {
$Stueckzeit="n.n.";}

Wie soll das aber nun funktionieren mit dem strtotime? Ich bekomme ja da einen Datumswert (also inkl. einer Jahreszahl) heraus...wenn ich den dividiere, dann bekomme ich doch etwas ganz anderes heraus, oder?

Ich habe jetzt durch Glück die Funktion doubleval bzw. floatval gefunden. Wäre es mit dieser nicht einfacher?
PHP:
$mynumstr = "100,000,000.75";
 $mynum = doubleval(str_replace(",","",$mynumstr));
 echo "Normal Value:".number_format($mynumstr);
Die TIMEDIFF-Funktion gibt mir ja - meinem Wissensstand nach - nur einen Zeitwert zurück, und keinen Datumswert. D.h. statt 0000-00-01 00:00:00 schreibt er mir 24:00:00.
Und wenn ich die Doppelpunkte rausnehme müsste ich damit doch gut und richtig rechnen können, oder?
 
Ganz blauäugig:
Code:
SELECT
	xyz,
	
	TIMEDIFF(Ende, Beginn) AS TimeDiff,
	UNIX_TIMESTAMP(TIMEDIFF(Ende, Beginn)) AS TimeDiffSeconds
FROM
	xyz
Code:
<?php
$Stueckzeit=number_format($Timedoff['TimeDiffSeconds']/$Stueckzahl,2);} ELSE {
$Stueckzeit="n.n.";}
 
Wofür steht xyz? Wie müsste ich das als php-Befehl formulieren? Habe es so probiert, aber es kommt überall ein leerer Wert raus...

Habe das so probiert:
PHP:
    $anfrage="SELECT *,
    TIMEDIFF($Startzeit, $Endzeit) AS TimeDiff,
    UNIX_TIMESTAMP(TIMEDIFF($Startzeit, $Endzeit)) AS TimeDiffSeconds
    FROM
    einzelschritt";
	$Stueckzeit =  mysql_query($anfrage);
	echo $Stueckzeit;
 
Code:
$sql = '
SELECT
  *,
  TIMEDIFF(End,Start) as Diff,
  UNIX_TIMESTAMP(End) - UNIX_TIMESTAMP(Start) as DiffSeconds
FROM
  tabelle
';
$sql = mysql_fetch_array( mysql_query( $sql ) );
echo 'Differenz: '.$sql['Diff']."\n".
'Differenz in Sekunden: '.$sql['DiffSeconds'];
DiffSeconds kannst du dann für weitere Berechnungen nutzen.
 
Zurück
Oben