Berechnen Sie die verstrichene Zeit in PHP

Lesezeit: 1 Minute

Benutzer-Avatar
Am wildesten

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

$d1=getdate();
$hournew=$d1['hours'];
$minnew=$d1['minutes'];
$secnew=$d1['seconds'];

$hourin = $_SESSION['h'];
$secin = $_SESSION['s'];
$minin = $_SESSION['m'];

$h1=$hournew-$hourin;
$s1=$secnew-$secin;
$m1=$minnew-$minin;

if($s1<0) {
    $s1+=60; }
if($s1>=(60-$secin)) {
    $m1--;  }
if($m1<0) {
    $m1++; }
echo $h1 . ":" . $m1 . ":" . $s1;

Irgendwelche Hilfe bitte?

BEARBEITEN

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

Benutzer-Avatar
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

    – ThorSummoner

    13. August 2014 um 18:10 Uhr

Verwenden PHP >= 5.3 Du könntest benutzen DateTime und seine Methode DateTime::diff()was a zurückgibt DateInterval Objekt:

$first  = new DateTime( '11:35:20' );
$second = new DateTime( '12:00:45' );

$diff = $first->diff( $second );

echo $diff->format( '%H:%I:%S' ); // -> 00:25:25

  • $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

<?php
$time = -hrtime(true);
sleep(5);
$end = sprintf('%f', $time += hrtime(true));
?>

Unterschied zwischen CLOCK_REALTIME und CLOCK_MONOTONIC?

1257460cookie-checkBerechnen Sie die verstrichene Zeit in PHP

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy