2012-01-27 35 views
7

Tôi đang gặp phải một vấn đề khá lạ khi sử dụng hàm diff date của PHP 5.3 để tính toán sự khác biệt trong ngày giữa hai ngày. Dưới đây là mã của tôi:Vấn đề PHP 5.3 lạ với sự khác biệt tính toán chênh lệch ngày trong ngày

$currentDate = new DateTime(); // (today's date is 2012-1-27) 
$startDate = new DateTime('2012-04-01'); 

$diff = $startDate->diff($currentDate); 

$daysBefore = $diff->d; 

echo $daysBefore; 

Mã trên hiển thị 4 là giá trị của biến $ daysTrước.

Tại sao PHP hiển thị chênh lệch 4 ngày trong khoảng thời gian từ ngày 27 tháng 1 năm 2012 đến ngày 1 tháng 4 năm 2012, khi rõ ràng có nhiều ngày nữa giữa những ngày này.

Tôi có làm gì sai không?

Trả lời

5

DateInterval::$d là ngày một phần của khoảng thời gian, không tổng số ngày của sự khác biệt. Cho rằng, bạn muốn DateInterval::$days, vì vậy:

$daysBefore = $diff->days; 
2

Khi tạo một DateInterval thông qua phương pháp DateTime::diff, nó không populates chỉ vài ngày, nhưng giờ, phút, giây, tháng và thậm chí nhiều năm trong ký tự đơn tài sản. Bạn đang kiểm tra một ký tự d cho các ngày, sẽ là những ngày còn lại sau khi năm và tháng được tính toán.

Hãy thử xem tài sản days, chỉ thực sự được điền khi bạn sử dụng diff.

Hành vi ở đây cực kỳ không nhất quán. Hãy xem trang hướng dẫn sử dụng DateInterval::format để biết một số thông tin thú vị về những gì sẽ xảy ra khi bạn tạo một DateInterval thông qua các phương tiện khác nhau.

2

Thuộc tính d là số ngày như trong "3 tháng, 4 ngày". Nếu bạn muốn tổng số ngày, hãy sử dụng thuộc tính days.

Các vấn đề liên quan