2012-01-27 12 views
7

İki tarih arasındaki farkı hesaplamak için PHP 5.3'ün tarih fark fonksiyonunu kullanarak oldukça garip bir problem yaşıyorum. Aşağıda benim kodum:Garip PHP 5.3 issue date diff farkını gün olarak hesaplıyor

$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; 

Yukarıdaki kod, $ daysBefore değişkeninin değeri olarak 4'ü görüntüler.

PHP, 27 Ocak 2012 ile 1 Nisan 2012 tarihleri ​​arasındaki 4 gün arasındaki farkı, bu tarihler arasında çok daha fazla gün olduğu açıkça ortaya çıkıyor.

Yanlış bir şey yapıyorum?

cevap

5

DateInterval::$d aralığının gün kısmı, farkın gün olup toplam sayısıdır. Bunun için, bu yüzden, DateInterval::$days istiyorum:

$daysBefore = $diff->days; 
2

DateTime::diff yöntemle bir DateInterval oluşturarak, sadece gün değil doldurur, ancak saat, dakika, saniye, ay ve tek karakteri özellikleri içinde hatta yıllar. Günler için tek karakterli d'u kontrol ediyorsunuz, bu da yıllar geçtikten sonraki günler ve aylar hesaplanıyor.

Yalnızca diff'u kullandığınızda popülasyon yapan days özelliğine bakmayı deneyin.

Davranış burada oldukça tutarsız. Çeşitli yollarla bir DateInterval oluşturduğunuzda ne olacağı hakkında bazı ilginç bilgiler için DateInterval::format kılavuz sayfasına bakın.

2

d özelliği, "3 ay, 4 gün" adresindeki gün sayısıdır. toplam gün sayısını istiyorsanız, days özelliğini kullanın.