2010-03-02 13 views
17

Angenommen, ich habe einen Unix-Zeitstempel in PHP. Wie kann ich meinen PHP-Zeitstempel auf die nächste Minute runden? Z.B. 16:45:00 im Gegensatz zu 16:45:34?Runden php Zeitstempel auf die nächste Minute

Danke für Ihre Hilfe! :)

+0

16.45.00 noch hat Sekunden ... Ich denke, du meinst, du willst auf die nächste Minute rasen, anstatt Sekunden zu entfernen. – Layke

+0

Ich habe gerade PHP installiert, damit ich Ihnen den Code dafür geben kann. Ich will nicht raten, weil ich die Zeit hasse(). Ich werde in 10 Minuten antworten, wenn niemand sonst hat. – Layke

+4

@Laykes http://codepad.org/ ist gut für schnelle Code-Checks – Yacoby

Antwort

49

Wenn der Zeitstempel eine Art Zeitstempel Unix ist, einfach

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

Wenn es der Stil, den Sie angegeben ist, können Sie ihn einfach in einen Zeitstempel Unix Stil und zurück konvertieren

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

round() wird verwendet, um sicherzustellen, dass es auf x für Werte zwischen x - 0.5 <= x < x + 0.5 rundet. Wenn Sie immer (wie angegeben) immer abrunden wollen Sie floor() oder die Modulo-Funktion

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

Yacoby, danke für die ausführliche Erklärung! Nun, da Sie es erwähnt haben, ist round() die Funktion, die ich am liebsten habe. Macht mehr Sinn in meiner Anwendung. :) – Lyon

2

Ah Damm nutzen könnten. Beat mich dazu :)

Das war meine Lösung auch.

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

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

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

+0

hehe, ich schätze deine Hilfe sehr! Vielen Dank :) – Lyon

6

Eine Alternative ist dies:

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

ich gelesen habe, dass jeder Aufruf von time() in PHP den ganzen Weg durch den Stapel in die OS gehen musste zurück. Ich weiß nicht, ob das in 5.3+ geändert wurde oder nicht? Der obige Code reduziert die Anrufe auf die Zeit() ...

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 über 10.000.000 itterations alle tatsächlich drei gleichzeitig tun;)

Verwandte Themen