2013-05-08 32 views
0

我有一個計算離開了產品上市日至expire.When我運行下面的代碼,我得到浮點數如3.4722222222222E-5減法日期收益浮動

$days_left = date('d', strtotime($this->expiry_date) - strtotime($date))/(60 * 60 * 24); 
$this->days_left = $days_left; 

當數函數我舍結果

(round)$this->days_left 

一個的愈來愈0

+2

嘗試'round($ this-> days_left);'not'(round)$ this-> days_left'([manual](http://php.net/manual/ru/function.round.php)) – BlitZ 2013-05-08 11:58:29

+0

是否確定$ this-> expiry_date始終具有該值,請檢查該值是否在您獲得該種浮動結果 – kumar 2013-05-08 13:10:10

回答

0

strtotime($this->expiry_date) - strtotime($date)讓你在幾秒鐘的時間差。

date('d', $time)會給你那一天$time的一部分,刪除任何月份/年的部分。並且你已經在一天的數字中劃分了每秒的秒數?顯然,浮點會導致計算機盲目地進行分工。

相反,溝date函數來獲取的天數,但在一天的秒數分配時間(秒):

$days_left = (strtotime($this->expiry_date) - strtotime($date))/(60 * 60 * 24); 

,你不「類型轉換」到round這不存在。根據意見,做round($this->days_left)

+0

時感謝。它工作正常 – user1180807 2013-05-09 16:17:33

0

如果你想正確計算日期,你應該使用DateTime對象。日期之間的差異(東西的持續時間)應該呈現爲DateInterval對象,這會給出確切的區別。