• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Inkonsequenz von Microtime()

Imbericle

Blogger
Mag zwar kleinklickerig klingen, doch ich bräuchte für ein Script den Vergleich von Millisekunden + ihre dazugehörige Zeit.

microtime gibt als erstes die Millisekunden an und dann die Unixzeit in Sekunden
zB so:
0.32735400 1254150778


Wenn ich nun allerdings zu Mircrotime() 50 Millisekunden hinzu addiere, so fällt der Unixzeitstempel, welchen ich brauche weg und es stehen nur noch die Millisekunden da.


Das ist Ansich kein Proplem, da ich den Unixzeitstempel ja wieder hinzuaddieren könnte, doch wirft ein Problem auf, wenn es zB gerade bei
0.95735400 + 50 Millisekunden steht, da ich dort dann mit einfachem time() hinzufügen nicht auskomme

und ich das Script nicht ewig verlängern will, in dem ich prüfe, ob die Millisekundenanzahl kleiner als 50 ist blaaaaaa (...)



würde ich wissen wie ich das wegfallen des Unixstempels auf kurze Art und Weise vermeide/ wie ich das anders angehe.


MfG
 
Werbung:
hoffe, ich habe dich richtig verstanden:
PHP:
$mtime = explode(" ",microtime());
print_r($mtime);
zerlegt dir microtime in ein array, mit dem du machen kannst, was du möchtest.
$mtime[0] = milisekunden
$mtime[1] = unix stempel.
 
Ich glaube nicht, dass du mich richtig verstandest, zumindest sehe ich nicht wie mir das in Array aufsplitten nackig ohne weitere ergänzungen helfen soll.

Ich will, dass wenn ich zu der Microtime 50 Millisekunden hinzuaddiere, der Unixzeitstempel rauskommt, mit Sekunden und Millisekunden und nicht nur die Millisekunden, da dass ohne Sekunden Probleme mit dem Überschlag der Millisekunden aufwerfen können, siehe Startbeitrag.


MfG
 
Werbung:
ich sehe wohl den wald vor lauter bäumen nicht, sorry, aber ich stehe echt auf der leitung
was du suchst ist wohl in diesem fall der wert, der in $starttime eingetragen ist:
PHP:
<?PHP
// startzeit ermitteln
$mtime = explode(" ",microtime());
$starttime = $mtime[1] + $mtime[0];


$endtime = $mtime[1] + $mtime[0];
echo "1.) vor addition: -> laufzeit: ".round($endtime-$starttime,6)."<br>";

usleep(1000000); // zeit verzögern
$mtime = explode(" ",microtime());
$endtime = $mtime[1] + $mtime[0];
echo "2.) nach usleep(1000000): -> laufzeit: ".round($endtime-$starttime,6)." sekunden<br>";

usleep(5000);

$mtime = explode(" ",microtime());
$endtime = $mtime[1] + $mtime[0];
echo "3.) nach weiteren usleep(50): -> laufzeit: ".round($endtime-$starttime,6)." sekunden<br>";
?>
ergibt sowas (in sekunden)
Code:
1.) vor addition: -> laufzeit: 0
2.) nach usleep(1000000): -> laufzeit: 1.000064 sekunden
3.) nach weiteren usleep(50): -> laufzeit: 1.00512 sekunden
 
Ich versteh's auch nicht.

Seit PHP 5 sieht die Signatur so aus: mixed microtime ([ bool $get_as_float ] ). Das explode ist also nicht mehr nötig.

Der Unix Timestamp kennt meines Wissens keine geringere Einheit als Sekunden.
 
jep, php5 habe ich ganz vergessen, da sieht das dann so aus:

PHP:
$starttime = microtime(true);

usleep(100);

$endtime = microtime(true);
$mtime = $endtime - $starttime;

echo $mtime." sekunden verbraten";
 
Werbung:
Ich will nicht das das script wartet.

Ich will dass $variable statt der aktuellen Zeit 0.56242524 1231256(wie auch immer unixsekunden grad stehen)

diese plus 50 milles ausgibt

also 0.61242524 1231256

MfG
 
Hm, mir fällt gerade auf: Bei mir (32-Bit) bringt es microtime(true) nur noch auf 2 Nachkommastellen.

Na ja, dann vorsichtshalber wohl doch wieder mit Gebastel.

PHP:
<?php

list($msec, $sec) = explode(' ', microtime());
$msec = (float) $msec;

echo $sec . '.' . substr($msec, 2) . '<br />';

$msec += 0.05;
if ($msec >= 1) {
    $sec  += 1;
    $msec -= 1;
}

echo $sec . '.' . substr($msec, 2);
 
mehr als 2 nach komma stellen brauch ich nicht, es wäre sogar gut wenn es nur die hätte.


ohne gebastel, sonst ist der Server zu lahm.

Wie ichs mir zurechtbasteln kann ist mir klar, doch ich hätte es gerne ohne gebastel-



Warum ist PHP an dieser Stelle so verflucht inkonsequenz?

MfG
 
Werbung:
find ich zwar schon, aber seis drum.
Vielendank, nun ist es so in der Art wie ich es mir vorstellte.

Frage dazu:
Rundet er die Millisekunden bei deinem Script gegebenenfalls auf, oder lässt er den Rest schlicht wegfallen?

MfG
 
Das rundet meinem Test nach mathematisch korrekt. (Die Frage hatte ich mir auch gestellt. :))

When called without the optional argument, this function returns the string "msec sec" [...].

-- PHP: microtime - Manual

Die Funktion gibt eben normalerweise einen String zurück und keine Zahl. (Vermutlich, weil die Zahl so viele Vor- und Nachkommastellen enthalten würde, dass sie nicht mehr sinnvoll in einen PHP-Datentyp passt. Das Problem fiel mir vor vier Posts ja auch auf.) Wenn du zur Rückgabe etwas addierst, addierst du Zeichenkette und Zahl, was hier nicht im Sinne des Erfinders ist und Typkonvertierung erfordert. (Die ist manchmal etwas tricky. Gerade keine Zeit, es genauer nachzusehen.)

Man könnte sagen, dass es inkosequent ist, die Funktionen einen String zurückgeben zu lassen. Falls du das meintest, okay.
 
Werbung:
Zurück
Oben