PHPにUNIXタイムスタンプがあると仮定します。 PHPのタイムスタンプを最も近い分に丸めるにはどうすればよいですか?例えば。 16:45:34ではなく16:45:00?
ご協力いただきありがとうございます! :)
タイムスタンプが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;
_
別の方法はこれです:
_$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つすべてが同時に実行されます;)
ああダム。私をそれに打ち負かしてください:)
これも私の解決策でした。
<?php
$round = ( round ( time() / 60 ) * 60 );
echo date('h:i:s A', $round );
?>