4 Kasım 2008İki tarih arasındaki gün farkını bulmak
Merhaba arkadaşlar şuan boştayım bişeyler yazayım dedim. Bu yazımda mktime() fonksiyonu kullanarak iki tarih arasındaki gün farkını bulacağız. Evet mktime() fonksiyonunu da bu arada tanımış ve görmüş olacağız.
Devam edelim bakalım…
Php’nin mktime() fonksiyonu kendisine verilen değerlere göre o tarihin unix timestamp cinsinden değerini vermektedir. Yani 01.01.1970 den bu yana kadar geçen süreyi saniye cinsinden vermektedir.
Kullanımına bakalım:
int mktime( int saat, int dakika, int saniye, int ay, int gun, int yil);
mktime fonksiyonu yukarıda da görüldüğü gibi altı adet argüman almakta ve bu aldığı argümanların veri tipi de integerdir yani sadece rakamlardan oluşabilir. Evet şimdi yukarıdaki fonksiyonumuzu kullanarak iki tarih arasındaki gün farkını nasıl alabiliriz ona geçelim.
function fark_bul($tarih1,$tarih2,$ayrac) { /** * Yusuf KOÇ ( Raiden ) * http://www.ysfkc.com * İki tarih arasındaki gün farkını bulur */ list($g1,$a1,$y1) = explode($ayrac,$tarih1); list($g2,$a2,$y2) = explode($ayrac,$tarih2); $t1_timestamp = mktime('0','0','0',$a1,$g1,$y1); $t2_timestamp = mktime('0','0','0',$a2,$g2,$y2); if ($t1_timestamp > $t2_timestamp) { $result = ($t1_timestamp - $t2_timestamp) / 86400; } else if ($t2_timestamp > $t1_timestamp) { $result = ($t2_timestamp - $t1_timestamp) / 86400; } return $result; }
fark_bul adında bir fonksiyon tanımladık. Şimdi fonksiyonumuzu biraz tanıyalım… Fonksiyonumuz üç adet argüman almaktadır bunlar tarih1, tarih2 ve ayraç. İsimlerinden de anlaşılacağı gibi tarih1 ve tarih2 argümanlarına gün farkını öğrenmek istediğimiz tarihleri belirtiyoruz. Ayraç da ise tarihimizdeki gün ay ve yıl değerlerini ayıran karakteri belirtiyoruz.
Daha sonrasında php’nin list dil yapısını kullanarak explode ile parçalanan verileri gün ay ve yıl olarak ayrı ayrı değişkenlere atıyoruz. İki tarihimizi de parçaladıktan sonra mktime() fonksiyonundan yararlanarak gün ay ve yıl olarak elde ettiğimiz tarihleri unix timestamp zaman mührüne çevirmeye sıra geldi.
Mktime() içindeki geçen üç adet sıfır saatin 00:00:00 olduğunu söylüyor isterseniz siz tam saat dakika ve saniye değerlerini de belirtebilirsiniz.. Evet t1 ve t2 değişkenlerimize iki tarihimizinde timestamp cinsinden değerlerini elde edip depoladıktan sonra if koşullarına geçiyoruz.
İki adet if koşulu kullandım bunun sebebi ise verilen tarihlerin hangisinin büyük ya da hangisinin küçük olduğunu anlamak için çünkü büyükten küçüğü çıkaracağız yoksa elde ettiğimiz gün farkının önünde eksi ( – ) işareti olacaktır
Koşullarımız hangi tarih daha büyük ise küçüğü büyükten çıkarıp güne bölüyor.. Fonksiyon içindeki 86400 değeri saniye cinsinden bir günü ifade etmektedir.
Yani:
saniye * dakika * saat ( 60 * 60 * 24 ) = 86400
Neden 86400 saniyeye bölüyoruz gibi bir düşünceniz olabilme ihtimaline karşı açıklık getireyim. Verilen iki tarihin timestamp değerlerini bulup bu değerleri çıkardık ve sonuç olarak elimizde yine saniye cinsinden bir değer elde etmiş olduk. Bu değeri de saniye cinsinden bir güne böldüğümüz de bize gün farkını verecektir.
En son olarak da elde ettiğimiz gün farkını fonksiyondan değer olarak döndürüyoruz..
Kullanımına bir örnek verelim… Örneğimizde yıl başına kaç gün varmış onu öğrenelim…
$yilbasi = '01.01.2009'; $bugun = '04.11.2008'; $gun = fark_bul($yilbasi,$bugun,'.'); echo 'Yıl başına '.$gun.' var';
Son olarak iki tarih arasındaki gün farkını nasıl bulacağımızı öğrenmiş olduk.. Bu tarz sorunlarla karşılaşanlara ilgili fonksiyonumuz yukarıdadır..


paylaşım için çok çok teşekkür
Hıms işime yarar sanırım
Teşekkurler
bu gün bu işime yaradı teşekkurler
bu tür dökümanlarını bekliyoruz
aynı işlemi strtotime ile de yapabilirsiniz..
bende tam strtotime ile daha kolay yapabilirsiniz diye yazacaktım ki eklemişsiniz :p
Teşekkürler çok faydalı bir döküman.
aklınıza ve elinize sağlık hocam.
ne mutlu ateşi yakanlara.
reis bu örneğinde 104 gün hesaplıyoru şuanki tarih ile fakat yanında .0455757 sayilar çıkıyor onun nasıl kaldiracağız yani verilen çıktı tam sayı olucak şekilde…
echo ‘Yıl başına ‘.$gun.’ var’;
çıktı: Yıl başına 104 gün var
tşkler bilgileriniz için…
echo ‘Yıl başına ‘.round($gun).’ var’;
olarak düzeltirseniz problem kalkmış olur realturk
[...] [...]
Paylaşım için çok teşekkür ederiz.
Merhabalar bir sorum olcaktı
Mesala sitemize bir üye kayıt oldu ve gün ay olarak;
bugun 10 kişi bu ay 1000 kişi diye bilgilendirme menüsü koycam.sormak istediğim üye kayıt olduğunda veritabında tarih alanı ne olmalı ve kaydetirirken tarihi time() olarakmı kaydettirmeliyiz ?
bunun için MySQL in date veritipini kullanmalısınız. Aynı zaman da dediğinizi yapabilmek için yine MySQL in DATE fonksiyonlarını incelemelisiniz.
Merhaba faydalı bir yazı olmuş..bizim bir dersimiz var çocuğun sanatsal gelişimi diye..orada cocukların yaslarını gun ay yıl olarak bulmak zorundayız.aslında cok bisey degil fakat bunu yüzlerce kez her cocuk icin yapmak yorucu..php ye yeni basladım ama bu tip birsey yazabilirsem hem kendimi hem sınıfımı büyük bir zahmetten kurtarırım
yazdığınız kodları bu sekilde uyarlamak kolaysa yazabilirmisiniz eger uzun ve farklı fonksiyonlar girecekse hangi fonksiyonları ögrenmem gerektigini söylermisiniz , tesekkürler.
vizelere de yaklasık 2 hafta var yardımcı olursanız cok iyi olucak
bu arada gün ay yıldan kastım “8 yıl 4 ay 21 günlük” gibisinden birşey