2017-09-02 175 views
0

我有2個日期時間,我需要計算它們之間的差值,小時格式爲,格式爲。困難的部分是確保結果將值存儲到2個小數位。小數格式的2個日期時間之間的差異

$datetime1 = new DateTime("2017-09-01 23:00:00"); 
$datetime2 = new DateTime(); 
$difference = $datetime2->diff($datetime1); 

但結果只是一個整數,對我來說失去了太多的準確性。如何將值保留到2位小數?

+0

你使用哪個PHP版本?我假設'5.x',但會因'DateTime'對象的變化而有助於答案。此外,關於您想要用精度/最終結果完成的任何背景也會有所幫助。 – fyrye

回答

2

DateTime::diff回報DaterInterval有相關財產每一個人的時間整數。

days屬性沒有考慮小於一天的增量,因爲它們累計到較小的屬性並從中移除,然後向下舍入。

所以$diff->h永遠不會大於23。雖然$diff->s$diff->i永遠不會大於59。日期將包含yearmonth屬性中的總天數。不要與$diff->d混淆,這是增量天數。

爲了確定使用差異的總小時數,您只需對每個屬性執行數學運算以檢索屬性的小時數。

示範:https://3v4l.org/KhBQC

$datetime1 = new DateTime('2017-09-01 23:00:00'); 
$datetime2 = new DateTime('2017-09-02 01:34:00'); 
$diff = $datetime2->diff($datetime1); 
$hours = round($diff->s/3600 + $diff->i/60 + $diff->h + $diff->days * 24, 2); 
echo $hours; //2.57 

在PHP 7.1,你也可以通過添加$diff->f/3.6e+9microseconds

+0

如何添加秒,然後除以'3600'?請參閱https://3v4l.org/N9lQq。 – localheinz

+0

無論哪種方式,人們也可以使用'DatePeriod'來檢索兩個日期之間的秒數並執行相同的操作。 https://3v4l.org/P0kJG – fyrye

+0

在互聯網上的最佳解釋,謝謝! –

1

小數點後2位:

$datetime1 = new DateTime("2017-09-01 23:00:00"); 
$datetime2 = new DateTime(); 

$epoch1 = $datetime1->getTimestamp(); 
$epoch2 = $datetime2->getTimestamp(); 

$diff = $epoch1 - $epoch2; 

echo number_format($diff/3600, '2');