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