PHP ile Zaman Farkı Hesaplamak

Dikkat: Bu yazının yazılma tarihinin üzerinden en az 60 gün geçmiş. İçerisindeki bilgiler güncelliğini yitirmiş olabilir. Yorumları ve güncellemeleri göz önünde bulundurarak yazıyı takip ediniz.
Daha önce php'de iki tarihi karşılaştırmayı anlatmıştımhttp://mfyz.com/phpde-tarih-karsilastirma ancak iki tarih arasındaki ay, gün, yıl farkını kullanmanız gerektiğinde, php'nin tarih-zaman sınıfını kullanarak iki tarih arasındaki zaman farkını istediğiniz periyodda hesaplatabilirsiniz.

Bu yönetmle hesaplayacağınız tarih farkının iki genel kullanımı vardır. Birincisi hesaplamalarınızda iki tarih arasındaki geçen zamana göre yaptığınız bir kuralınız vardır. Mesela bir blog yazınızın 1 aydan önce yazıldığını denetlemek ve buna göre "Bilgiler geçerliliğini yitirmiş olabilir" gibi bir not göstermek istiyorsunuz. Bunun için şu an ile yazının yazılma tarihi arasında 1 ay olup olmadığını sorgulayabilirsiniz.

Bu hesaplama aslında basit bir matematiksel bir hesap gibi görünse de aslında ay uzunluğu, artık yıl hesabı gibi nedenlerden dolayı ve her zaman 1 ay = 30 gün olmaması nedeniyle biraz daha karışık olabiliyor. Dolayısıyla anlattığım yöntem gibi hazır yöntemleri kullanarak bu hesaplamaları doğru şekilde yapabilirsiniz.

Şimdi basit bir kod ile örnekleyeceğim.
$now     = new DateTime();
$created = new DateTime($_entry['created_at']);
$diff    = date_diff($now, $created);
$days    = $diff->format('%d');
$hours   = $diff->format('%h');
$mins    = $diff->format('%i');

$diffStr = NULL;
if ($days > 0) {
     $diffStr .= $days . ' gün';
}
if ($hours > 0) {
     $diffStr .= ' ' . $hours . ' saat';
}
if ($mins > 0) {
     $diffStr .= ' ' . $mins . ' dakika';
}
Yukarıdaki kodda $diffStr değişkeni, yazınızın kaç dakika, saat, gün önce eklendiğini gösterecektir. Eğer isterseniz ayı, yılı da ekleyerek herhangi bir tarih formatını "3 gün 8 saat 3 dakika önce" şeklinde bir metine çevirebilirsiniz.

Yorumlar

Üye Resmi Beyazıt
24 Ağustos Cuma ´12 07:30
Selam. kimi zaman yazılarınızı kaynak belirterek üyesi olduğum forumlara aktarıyorum. Nedir, bu sırada yazının sonunda "Devamını oku: PHP ile Zaman Farkı Hesaplamak - PHP ve Pear Dökümanları - Dökümanlar - mfyz.comhttp://mfyz.com/php-ile-zaman-farki-hesaplamak&......giOsu" gibi son derece gereksiz bir ibare çıkıyor. Neden? Bunun yararı nedir? Bunu kaldırmanızı öneriyorum. Selamlar.
26 Ağustos Pazar ´12 14:51
date_diff fonksiyonun tanımı nerede?
28 Eylül Cuma ´12 00:59
bende bu yazıyı inceledikten sonra zaman farkını hesaplayan bir fonksiyon yazıp sizlerle paylaşmak istedim.nede olsa bilgi paylaştıkça çoğalır arkadaşlar.
son derece basit bir şekilde anlayabileceğiniz ve kullanabilceğiniz bir fonksiyondur.tamamiyle bana aittir

İşleme başlamadan önce tarihleri kaydedeceğiniz bir tablo oluşturun

Veritabanımıza şimdiki tarihleri oluşturup bunu kaydediyoruz.
$t_gun    = date("d");
$t_ay     = date("m");
$t_yil    = date("y");
$t_saat   = date("H");
$t_dakika = date("i");
$t_saniye = date("s");

$ekle = mysql_query("INSERT INTO tablo_adı (t_gun,t_ay,t_yil,t_saat,t_dakika,t_saniye) values ('$t_gun','$t_ay','$t_yil','$t_saat','$t_dakika','$t_saniye')");

Şimdide veritabanına kaydettiğimiz tarihleri veritabanından çekiyoruz

$query = mysql_query("SELECT * FROM tablo_adı");
While($q=mysql_fetch_array($query)){
$t_gun = $q["t_gun"];
$t_ay  = $q["t_ay"];
$t_yil = $q["t_yil"];
$t_saat = $q["t_saat"];
$t_dakika = $q["t_dakika"];
$t_saniye = $q["t_saniye"];

//--Veritabanından çektiğimizbilgileri karşılaştırıyoruz
$simdiki_gun    = date("d");
$simdiki_ay     = date("m");
$simdiki_yil    = date("y");
$simdiki_saat   = date("H");
$simdiki_dakika = date("i");
$simdiki_saniye = date("s");


$gun    = $simdiki_gun - $t_gun;
$ay       = $simdiki_ay - $t_ay;
$yil       = $simdiki_yil - $t_yil;
$saat    = $simdiki_saat - $t_saat;
$dakika = $simdiki_dakika - $t_dakika;
$saniye = $simdiki_saniye - $t_saniye;

//--Son olarakta class veya div tagı içine hesaplanmış tarihi yazdırıyoruz
echo '<div class='tarih'>';
if($saniye<60){
if($dakika=="0"){
echo "Birkaç saniye önce";
}else{
if($dakika>59){
}else{
if($saat>0){
if($gun>0){
if($ay>0){
if($yil>0){
echo "$yil yıl önce";
}else{
echo "$ay ay önce";
}
}else{
echo "$gun gün önce";
}
}else{
echo "$saat saat önce";
}
}else{
echo "$dakika dakika önce";
}
}
}
}else{
echo "Birkaç saniye önce";
}
echo '</div>';

}
Üye Resmi Emre
11 Ocak Pazartesi ´16 11:50
Dediğinizi aynen yaptım ben ama 16 yıl  önce diyor ne karıştı acaba
Üye Resmi Emre
11 Ocak Pazartesi ´16 11:53
tamam sorunum düzeldi ben yanlış birşey yapmışım ayrıca uygulamanız çok güzel tam böyle bir şey arıyordum sağolun
Yeni Yorum *
İletişim Bilgileri
*
*
E-Posta adresiniz gösterilmeyecektir.
(unut)
Güvenlik Kodu *

Gönderiliyor