PHP-Zeitstempel auf die nächste Minute runden

Lesezeit: 3 Minuten

Benutzeravatar von Lyon
Lyon

Angenommen, ich habe einen Unix-Zeitstempel in PHP. Wie kann ich meinen PHP-Zeitstempel auf die nächste Minute runden? ZB 16:45:00 statt 16:45:34?

Danke für Ihre Hilfe! 🙂

  • 16:45:00 hat immer noch Sekunden … Ich denke, Sie meinen, dass Sie auf die nächste nächste Minute runden möchten, anstatt Sekunden zu entfernen.

    – Layke

    2. März 2010 um 16:12 Uhr

  • Ich habe gerade PHP installiert, damit ich Ihnen den Code dafür geben kann. Ich möchte nicht raten, weil ich time() hasse. Ich antworte in 10 Minuten, falls sonst niemand hat.

    – Layke

    2. März 2010 um 16:16 Uhr

  • @Laykes codepad.org ist gut für schnelle Code-Checks

    – Yacoby

    2. März 2010 um 16:23 Uhr

  • Danke Laykes! Yacoby lieferte, was ich suchte. Ich werde meine Frage bearbeiten, um sie klarer zu machen.

    – Lyon

    2. März 2010 um 16:24 Uhr

  • @Yacoby: Das ist ziemlich cool. Ich habe sowieso gerade einen WAMP-Stack installiert. Ich habe es mit einem Lesezeichen versehen.

    – Layke

    2. März 2010 um 16:26 Uhr

Benutzeravatar von Yacoby
Yacoby

Wenn der Zeitstempel ein Zeitstempel im Unix-Stil ist, einfach

$rounded = round($time/60)*60;

Wenn es der von Ihnen angegebene Stil ist, können Sie ihn einfach in einen Zeitstempel im Unix-Stil und zurück konvertieren

$rounded = date('H:i:s', round(strtotime('16:45:34')/60)*60);

round() wird verwendet, um auf einfache Weise sicherzustellen, dass auf rundet x für Werte zwischen x - 0.5 <= x < x + 0.5. Wenn Sie immer abrunden wollten (wie angegeben), könnten Sie verwenden floor() oder die Modulo-Funktion

$rounded = floor($time/60)*60;
//or
$rounded = time() - time() % 60;

  • Yacoby, danke für die umfassende Erklärung! Nun, da Sie es erwähnt haben, ist round() die Funktion, die ich bevorzuge. Macht in meiner Bewerbung mehr Sinn. 🙂

    – Lyon

    2. März 2010 um 16:28 Uhr

Eine Alternative ist diese:

$t = time();
$t -= $t % 60;
echo $t;

Das habe ich bei jedem Anruf nachgelesen time() in PHP musste den ganzen Weg durch den Stack zurück zum Betriebssystem gehen. Ich weiß nicht, ob dies in 5.3+ geändert wurde oder nicht? Der obige Code reduziert die Aufrufe auf time()…

Benchmark-Code:

$ php -r '$s = microtime(TRUE); for ($i = 0; $i < 10000000; $i++); $t = time(); $t -= $t %60; $e = microtime(TRUE); echo $e - $s . "\n\n";'

$ php -r '$s = microtime(TRUE); for ($i = 0; $i < 10000000; $i++); $t = time() - time() % 60; $e = microtime(TRUE); echo $e - $s . "\n\n";'

$ php -r '$s = microtime(TRUE); for ($i = 0; $i < 10000000; $i++); $t = floor(time() / 60) * 60; $e = microtime(TRUE); echo $e - $s . "\n\n";'

Interessanterweise machen über 10.000.000 Iterationen alle drei tatsächlich die gleiche Zeit;)

Ach verdammt. Schlage mich vor 🙂

Das war auch meine Lösung.

<?php 
$round = ( round ( time() / 60 ) * 60 );

echo date('h:i:s A', $round );
?>

http://php.net/manual/en/function.time.php

Verwenden Sie einfach Folgendes:

$last_hour   = date('Y-m-d H:00:00') // to last hour;
$last_minute = date('Y-m-d H:i:00')  // to last minute;

Ich benutze es, um alte Warenkörbe mit Ablaufdatum (+ 5 Minuten Nachfrist) in meiner Datenbank zu löschen:

// clean expired shopping carts
function shop_clean_carts($grace = 5) {
    
    $expiry = date('Y-m-d H:i:00', strtotime("-$grace minutes"));
    $q      = "DELETE FROM `shop__cart` 
               WHERE `expiry` < '$expiry'
               AND `expiry` IS NOT NULL
               AND `fk_order_id` IS NULL";
    $db->query($q);
    
    return;
}

Dies ist besser für mySql NOW(), da die Abfrage zwischengespeichert wird.

1439870cookie-checkPHP-Zeitstempel auf die nächste Minute runden

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

Privacy policy