PHP'de Tarih ve Saat Farkı Hesaplama

16 Ocak 2010

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())."
"; echo "1: ".tarihFarki("20090401040302", time(), "ay")." ay
"; echo "2: ".tarihFarki(time(), "2009-07-23 04:00:00", "saat")." saat
"; echo "3: ".tarihFarki("-3 day", "2009-07-23 04:00:00", "gun")." gun
"; echo "4: ".tarihFarki("2008-06-23", "2009-07-23", "yil")." yıl
"; $t=tarihFarki("2008-06-23", "2009-07-23"); echo "5: "; print_r($t); echo "
";

Kod

/**
 * Iki tarih arasindaki farki bulur.
* kullanim: tarihFarki($d1[, $d2=null [, $format="*"]);
* ornek:
* echo "şu an:".date("r",time())."
"; * echo "1: ".tarihFarki("20090401040302", time(), "ay")." ay
"; * echo "2: ".tarihFarki(time(), "2009-07-23 04:00:00", "saat")." saat
"; * echo "3: ".tarihFarki("-3 day", "2009-07-23 04:00:00", "gun")." gun
"; * echo "4: ".tarihFarki("2008-06-23", "2009-07-23", "yil")." yıl
"; * $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; }

PHP'de '... gün önce' Şeklinde Bağıl Tarih Yazma

27 Nisan 2010

PHP'de '... gün önce' Şeklinde Bağıl Tarih Yazma

Youtube yorumlarında olduğu gibi, tarihleri '2 gün önce', '4 ay önce' gibi aradan geçen zaman şeklinde yazan fonksyion.

Sitenize javascript ile kısayollar ekleyin

25 Nisan 2010

Sitenize javascript ile kısayollar ekleyin

Websiteniz için klavye kısayolları yaratmaya yarayan javascript kütüphanesi. Herhangi bir kütüphaneye (JQuery, Mootools, vs) bağlı olmadan çalışabiliyor olması en büyük artılarından.

PHP'de Tarih ve Saat Farkı Hesaplama

16 Ocak 2010

PHP'de Tarih ve Saat Farkı Hesaplama

String ya da unix timestamp olarak gelen iki tarih arasındaki farkı içinde saniye, dakika, gun, ay, vs, gibi detayları barındıran bir dizi şekilde döndüren fonksyion.

PHP ile dizin silme fonksiyonu

12 Ocak 2010

PHP ile dizin silme fonksiyonu

Bir dizin ve içindeki dosyaları silmeyi sağlayan fonksiyon. Gerektiğinde 'regular expressions' kullanarak isme göre silme işlemi yapabilirsiniz.

PHP ile Türkçe Tarih Gösterimi-Çevrimi

30 Aralık 2009

PHP ile Türkçe Tarih Gösterimi-Çevrimi

Tarihleri Türkçe olarak yazan fonksiyon. Altyapısında PHP'nin 'date' fonksiyonu kullanılıyor. Bu sayede bu fonksiyonda kullandığınız parametreleri aynen kullanabiliyorsunuz.

UTF-8 metinlerdeki aksanları kaldırma

12 Aralık 2009

UTF-8 metinlerdeki aksanları kaldırma

İngiliz alfabesinde bulunmayan aksanlı harfleri (ç, ğ, ş), bu alfabeye uygun aksansız harflere (c, g, s) çevirmek için gerekli kod.