web-dev-qa-db-ja.com

PHPのタイムスタンプを最も近い分に丸めます

PHPにUNIXタイムスタンプがあると仮定します。 PHPのタイムスタンプを最も近い分に丸めるにはどうすればよいですか?例えば。 16:45:34ではなく16:45:00?

ご協力いただきありがとうございます! :)

20
Lyon

タイムスタンプがUnixスタイルのタイムスタンプの場合、単純に

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

指定したスタイルの場合は、Unixスタイルのタイムスタンプに変換して戻すことができます。

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

round()は、_x - 0.5 <= x < x + 0.5_の間の値に対してxに丸められるようにする簡単な方法として使用されます。 (示されているように)常に切り捨てたい場合は、floor()またはモジュロ関数を使用できます。

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

別の方法はこれです:

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

PHPでtime()を呼び出すたびに、スタックを介してOSに戻る必要があることを読みました。これが変更されたかどうかはわかりません。 5.3以降では?上記のコードはtime()への呼び出しを減らします。

ベンチマークコード:

_$ 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";'
_

興味深いことに、10,000,000回を超えるイテレーションは、実際には3つすべてが同時に実行されます;)

6
Nick

ああダム。私をそれに打ち負かしてください:)

これも私の解決策でした。

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

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

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

2
Layke