For english: Date & Time Difference in PHP
İki tarih arasındaki farkı hesaplamak için PHP’de date_diff diye bir fonksiyon bulunmakta ama ne yazık ki bu fonksiyon PHP’nin sadece 5.3 ve sonraki versiyonlarında çalışıyor. Dolayısıyla pek çok kişi için tarih-saat farkı hesaplayan bir fonksiyona ihtiyaç var. Bu sayfada bu işi yapan bir fonksiyon bulacaksınız. Aradığınız sadece Türkçe tarih & saat göstermek ise şu yazıya bakınız: PHP ile Türkçe Tarih Gösterimi-Çevrimi
Kullanım
Fonksiyon 3 adet değişken alıyor. Bunlardan sadece birincisi zorunlu.
dateDiff($d1[, $d2=null [, $format="*"]);
İlk iki parametre olarak farkı alınacak tarih ve/veya saatleri giriyorsunuz. Tarih formatı olarak Unix zaman damgası veya ‘strtotime‘ fonksiyonunun kabul ettiği herhangi bir değer kullanılabilir. Dolayısıyla tarih girmek için ‘time()‘ fonksiyonun ya da acayip bir format kullanmıyorsanız MySQL verilerini doğrudan kullanabilirsiniz. ‘strtotime‘ fonksiyonunu kabul ettiği değerler ile ilgili php.net strtotime sayfasına bakabilirsiniz. Girilen zamanların hangisinin büyük olduğu önemli değil. Yani tarihFarki(’12-03-2009′, ‘01-01-2010′) ve tarihFarki(’01-01-2010′, ‘12-03-2009′) size aynı sonuçları getirecektir. Son parametre olan $format sonucun hangi şekilde döndürüleceğini belirler. $format olarak “saniye”, “dakika”, “saat”, “gun”, “hafta”, “ay”, “yil” veya “*” değerlerinden birisini girebilirsiniz. “*” dışındaki seçeneklerde fonksiyon size belirtilen formatta bir sayı döndürecekir. Yani tarihFarki(’2010-01-02′, ‘2010-01-01′, ‘gun’) yazarsanız alacağınız sonuç ‘1′, tarihFarki(’2010-01-02′, ‘2010-01-01′, ‘dakika’) yazarsanız ‘86400′ (bir gündeki dakika sayısı) olur. Eğer $format olarak “*” girerseniz ya da bu alanı hiç kullanmazsanız fonksiyon yukarıda geçen tüm değerleri içeren bir dizi döndürür.
Örnekler
echo "Şu an:".date("r",time())."<br>"; echo "1: ".tarihFarki("20090401040302", time(), "ay")." ay<br>"; echo "2: ".tarihFarki(time(), "2009-07-23 04:00:00", "saat")." saat<br>"; echo "3: ".tarihFarki("-3 day", "2009-07-23 04:00:00", "gun")." gun<br>"; echo "4: ".tarihFarki("2008-06-23", "2009-07-23", "yil")." yıl<br>"; $t=tarihFarki("2008-06-23", "2009-07-23"); echo "5: "; print_r($t); echo "<br>";
Kod
/** * Iki tarih arasindaki farki bulur.<br> * <strong>kullanim:</strong> dateDiff($d1[, $d2=null [, $format="*"]);<br> * <strong>ornek:</strong><br> * echo "şu an:".date("r",time())."<br>"; * echo "1: ".tarihFarki("20090401040302", time(), "ay")." ay<br>"; * echo "2: ".tarihFarki(time(), "2009-07-23 04:00:00", "saat")." saat<br>"; * echo "3: ".tarihFarki("-3 day", "2009-07-23 04:00:00", "gun")." gun<br>"; * echo "4: ".tarihFarki("2008-06-23", "2009-07-23", "yil")." yıl<br>"; * $t=tarihFarki("2008-06-23", "2009-07-23"); * echo "5: "; print_r($t); * * @param mixed $d1 ilk tarih. unix zaman damgasi ya da strtome * fonsksiyonunun kabul ettigi herhangi bir deger olabilir. * ornek: '2009-05-23', '2009-05-23 12:10:04', '-2 day', * '23-05-2009 12:23', '20090523121004' * @param mixed $d2 ikinci tarih. ilkiyle ayni ozellikleri tasir. eger * girilmez ya da bos bir deger olarak girilirse o anki * tarih olarak alinir. bu iki tarih arasinda * hangisinin buyuk hangisinin kucuk oldugu onemli degildir. * ikisi de ayni sonuc verir. * @param str $format "saniye", "dakika", "saat", "gun", "hafta", "ay", * "gun", "*". * eger girilmez ya da "*" olarak girilirse yukaridaki * butun degerleri iceren bir dizi dondurur. belirtilen * diger degerlerden birisi girilirse bu tipte bir sayi * dondurur. * @return mixed sayi ya da dizi tipinde tarihler arasindaki farki * dondurur. dizinin icinde bulunan degiskenler * sunlardir: "saniye", "dakika", "saat", "gun", "hafta", * "ay", "gun" olacaktir. */ function tarihFarki($d1, $d2=null, $format="*"){ if($d2==null){ $d2=$d1; $d1=time(); } if(!is_int($d1)) $d1=strtotime($d1); if(!is_int($d2)) $d2=strtotime($d2); $d=abs($d1-$d2); $format=strtolower($format); if(empty($format)) $format="*"; $result = array(); if($format=="*" || $format=="gun") $result["gun"] = floor($d/(60*60*24)); if($format=="*" || $format=="ay") $result["ay"] = floor($d/(60*60*24*30)); if($format=="*" || $format=="yil") $result["yil"] = floor($d/(60*60*24*365)); if($format=="*" || $format=="hafta") $result["hafta"] = floor($d/(60*60*24*7)); if($format=="*" || $format=="saat") $result["saat"] = floor($d/(60*60)); if($format=="*" || $format=="dakika") $result["dakika"]= floor($d/60); if($format!="*") return $result[$format]; else return $result; }

(4 oy, ortalama: 4,50 / 5)
Yorumlar