Hallo zusammen Ich versuche, die verstrichene Zeit in PHP zu berechnen. Das Problem liegt nicht in PHP, sondern in meinen mathematischen Fähigkeiten. Zum Beispiel: Time In: 11:35:20 (hh:mm:ss), sagen Sie jetzt, die aktuelle Zeit ist: 12:00:45 (hh:mm:ss), dann ergibt die Zeitdifferenz in meiner Formel die Ausgabe: 1:-34:25. Eigentlich müsste es heißen: 25:25
Entschuldigung, ich musste wahrscheinlich hinzufügen, dass die Seite jede Sekunde aktualisiert wird, um die neue verstrichene Zeit anzuzeigen, also muss ich meine obige Methode verwenden. Ich entschuldige mich dafür, dass ich es nicht richtig erklärt habe.
Erwägen Sie die Konvertierung in Zeitstempel mit mktime() und dann einfach subtrahieren. Und vielleicht wäre es eine gute Idee, einfach damit zu arbeiten time() Anstatt von getdate() In diesem Fall.
– Bis Helge
21. Oktober 2011 um 13:47 Uhr
und wenn Sie einen inversen Ansatz verwenden würden? Sie kennen die Zeit, in der sich der Benutzer eingeloggt und dann eine Art Testversion angezeigt hat?
– Jelly Belly
21. Oktober 2011 um 13:48 Uhr
Vielen Dank für die Antworten, ich habe es endlich zum Laufen gebracht, nachdem ich mir alle Antworten mit folgendem angesehen habe: ` if($s1<0) { $s1+=60; } if($s1>=(60-$secin)) { $m1–; } if($m1<0) { $m1 *= -1; $m1 = (60 - $m1); $h1--; } `
– Am wildesten
21. Oktober 2011 um 14:41 Uhr
WWW
Dadurch erhalten Sie die Anzahl der Sekunden zwischen Start und Ende.
<?php
// microtime(true) returns the unix timestamp plus milliseconds as a float
$starttime = microtime(true);
/* do stuff here */
$endtime = microtime(true);
$timediff = $endtime - $starttime;
?>
Um es später im Uhrstil anzuzeigen, würden Sie Folgendes tun:
<?php
// pass in the number of seconds elapsed to get hours:minutes:seconds returned
function secondsToTime($s)
{
$h = floor($s / 3600);
$s -= $h * 3600;
$m = floor($s / 60);
$s -= $m * 60;
return $h.':'.sprintf('%02d', $m).':'.sprintf('%02d', $s);
}
?>
Wenn Sie die Zahlen nach dem Komma nicht anzeigen möchten, fügen Sie einfach hinzu round($s); zum Anfang des secondsToTime() Funktion.
Sie haben die Frage nicht richtig gelesen. Er will nicht die Laufzeit seines Skripts messen, sondern eine beliebige Zeitspanne.
– Bis Helge
21. Oktober 2011 um 13:45 Uhr
Ich gebe zu, dass es irreführend sein könnte, aber imho fragt er nicht nach Benchmarking, sondern nach der Berechnung eines einfachen Zeitunterschieds. Denken Sie zum Beispiel an eine Reisedauer oder ein Rennen oder so etwas
– Damien Pirsy
21. Oktober 2011 um 13:45 Uhr
Entschuldigung, ich musste wahrscheinlich hinzufügen, dass die Seite jede Sekunde aktualisiert wird, um die neue verstrichene Zeit anzuzeigen, also muss ich meine obige Methode verwenden. Ich entschuldige mich dafür, dass ich es nicht richtig erklärt habe.
– Am wildesten
21. Oktober 2011 um 13:48 Uhr
Das würde meine Antwort ein wenig ändern, obwohl die anderen Empfehlungen die Idee unterstützen würden, die Zeiten, die Sie vergleichen möchten, entweder als DateTime-Objekte oder als UNIX-Zeitstempel zu speichern. Erledigen Sie Ihre gesamte Arbeit in derselben Einheit (in diesem Fall Sekunden) und wandeln Sie dann wieder in eine anzeigefreundlichere Zeit um.
– WWW
21. Oktober 2011 um 13:56 Uhr
Ich würde empfehlen, einen schöneren Modulo-Block zu verwenden. Einer, der im PHP-Handbuch gepostet wurde, ist derjenige, den ich am liebsten kopiere: php.net/manual/en/function.time.php#108581
$first = new DateTime($_SESSION['h'].':'.$_SESSION['m'].':'.$_SESSION['s']); funktioniert, um aus den angegebenen Sitzungsdaten ein DateTime-Objekt zu erstellen.
– Duroth
21. Oktober 2011 um 13:56 Uhr
leider verwende ich php 5.2.6
– Am wildesten
21. Oktober 2011 um 14:01 Uhr
Perfekte Lösung für mich, um zu verfolgen, wie lange die Ausführung einer Funktion dauert. Vielen Dank!
– Scott Fleming
24. Februar 2021 um 14:21 Uhr
Verfolgen Sie Ihre Zeit mit der Funktion ‘time()’. Sie können ‘time()’ später in andere Formate konvertieren.
$_SESSION['start_time'] = time();
$end_time = time();
$end_time - $_SESSION['start_time'] = 65 seconds (divide by 60 to get minutes)
Und dann können Sie das später mit einem anderen Wert vergleichen.
Verwenden Sie Mikrozeit, wenn Sie Details im Millisekundenbereich benötigen.
Stellen Sie außerdem sicher, dass Sie sich die PHP-Funktion date() ansehen. Verknüpfung
– donutdan4114
21. Oktober 2011 um 13:48 Uhr
Sie können die gezeigten Lösungen implementieren, aber ich verwende gerne die phptimer-Klasse (oder andere, dieses Rad wurde ein paar Mal erfunden). Der Vorteil besteht darin, dass Sie den Timer normalerweise als aktiv oder nicht definieren können, wodurch Sie die Timer-Aufrufe für spätere Bezugnahme in Ihrem Code belassen können, ohne alle Zeitpunkte erneut eingeben zu müssen.
Versuchen Sie für eine hochauflösende Zeit die Verwendung einer monotonen Uhr: Std
Erwägen Sie die Konvertierung in Zeitstempel mit
mktime()
und dann einfach subtrahieren. Und vielleicht wäre es eine gute Idee, einfach damit zu arbeitentime()
Anstatt vongetdate()
In diesem Fall.– Bis Helge
21. Oktober 2011 um 13:47 Uhr
und wenn Sie einen inversen Ansatz verwenden würden? Sie kennen die Zeit, in der sich der Benutzer eingeloggt und dann eine Art Testversion angezeigt hat?
– Jelly Belly
21. Oktober 2011 um 13:48 Uhr
Vielen Dank für die Antworten, ich habe es endlich zum Laufen gebracht, nachdem ich mir alle Antworten mit folgendem angesehen habe: ` if($s1<0) { $s1+=60; } if($s1>=(60-$secin)) { $m1–; } if($m1<0) { $m1 *= -1; $m1 = (60 - $m1); $h1--; } `
– Am wildesten
21. Oktober 2011 um 14:41 Uhr