我有2個日期時間,我需要計算它們之間的差值,小時格式爲,格式爲。困難的部分是確保結果將值存儲到2個小數位。小數格式的2個日期時間之間的差異
$datetime1 = new DateTime("2017-09-01 23:00:00");
$datetime2 = new DateTime();
$difference = $datetime2->diff($datetime1);
但結果只是一個整數,對我來說失去了太多的準確性。如何將值保留到2位小數?
我有2個日期時間,我需要計算它們之間的差值,小時格式爲,格式爲。困難的部分是確保結果將值存儲到2個小數位。小數格式的2個日期時間之間的差異
$datetime1 = new DateTime("2017-09-01 23:00:00");
$datetime2 = new DateTime();
$difference = $datetime2->diff($datetime1);
但結果只是一個整數,對我來說失去了太多的準確性。如何將值保留到2位小數?
DateTime::diff
回報DaterInterval
有相關財產每一個人的時間整數。
days
屬性沒有考慮小於一天的增量,因爲它們累計到較小的屬性並從中移除,然後向下舍入。
所以$diff->h
永遠不會大於23
。雖然$diff->s
和$diff->i
永遠不會大於59
。日期將包含year
和month
屬性中的總天數。不要與$diff->d
混淆,這是增量天數。
爲了確定使用差異的總小時數,您只需對每個屬性執行數學運算以檢索屬性的小時數。
$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+9
佔microseconds
。
如何添加秒,然後除以'3600'?請參閱https://3v4l.org/N9lQq。 – localheinz
無論哪種方式,人們也可以使用'DatePeriod'來檢索兩個日期之間的秒數並執行相同的操作。 https://3v4l.org/P0kJG – fyrye
在互聯網上的最佳解釋,謝謝! –
小數點後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');
你使用哪個PHP版本?我假設'5.x',但會因'DateTime'對象的變化而有助於答案。此外,關於您想要用精度/最終結果完成的任何背景也會有所幫助。 – fyrye