2010-03-02 93 views
17

假設我在PHP中有一個unix時間戳。我怎樣才能將我的php時間戳四捨五入到最接近的分鐘?例如。 16:45:00而不是16:45:34?圓形PHP時間戳到最近的分鐘

感謝您的幫助! :)

+0

16:45:00仍有幾秒鐘...我想你的意思是你想輪到下一個最接近的分鐘,而不是刪除秒。 – Layke 2010-03-02 16:12:47

+0

我剛剛安裝了PHP,因此我可以爲您提供執行此操作的代碼。我不想猜測因爲我討厭時間()。如果沒有其他人,我會在10分鐘內回答。 – Layke 2010-03-02 16:16:46

+4

@Laykes http://codepad.org/適合做快速代碼檢查 – Yacoby 2010-03-02 16:23:24

回答

49

如果時間戳是一個Unix風格的時間戳,只需

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

如果您指定的樣式,你可以簡單地將其轉換爲Unix類型時間戳和背部

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

使用round()作爲確保其值爲x的簡單方法,其值在x - 0.5 <= x < x + 0.5之間。如果你一直想永遠本輪下跌(如所示),你可以使用floor()或模函數

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

Yacoby,謝謝你的全面解釋!現在你已經提到過了,round()是我喜歡的函數。在我的應用程序中更有意義。 :) – Lyon 2010-03-02 16:28:33

2

阿壩。打我吧:)

這也是我的解決方案。

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

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

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

+0

呵呵,我真的很感謝你的幫助!謝謝 :) – Lyon 2010-03-02 16:26:31

6

另一種方法是這樣的:

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

我讀過,在PHP每次調用time()只好一路通過堆棧回OS。我不知道5.3以上版本是否已經改變了?上面的代碼減少了時間()的調用...

基準代碼:

$ 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 itterations所有三個實際做的同時;)

相關問題