Php ile Şu Kadar Önce Yazıldı

 bcakir
 22 Nisan 2012
 Php

Merhaba arkadaşlar, bu yazımda Facebook’ta herkesin görmüş olduğu 2 dk önce yazıldı gibi sonuç veren uygulamayı yapacağız. Bu uygulama için bir Php fonksiyonu yazacağız. Bu fonksiyon sayesinde gönderdiğiniz bütün timestamp değerindeki zamanlar, şu kadar süre önce yazıldı şekline dönüşecek. Bu fonksiyonu yapacağınız uygulamalara ekleyerek, yazılarınızın ya da yorumlarının ne kadar süre önce yazıldıklarını kolayca okurlarınıza gösterebileceksiniz. Uygulamamızın temelini açıkladım, şimdi geliştirmeye başlayalım.

<?php
function cevir($zaman){
    //şimdiki zaman ile gönderilen zaman farkını bulma
    $fark = time() - $zaman;
    //farkın ne kadar süre yaptığını hesaplama
    $sn = $fark;
    $dk = round($fark/60);
    $saat = round($fark/60*60);
    $gun = round($fark/60*60*24);
    $hafta = round($fark/60*60*24*7);
    $ay = round($fark/60*60*24*7*4);
    $yil = round($fark/60*60*24*7*4*12);

    //farkın üzerinden ne kadar zaman geçtiğini bulma
    if($sn < 60){
    	echo $sn.' saniye önce yazıldı.';
    }elseif($dk < 60){
    	return $dk.' dakika önce yazıldı.';
    }elseif($saat < 24){
    	return $saat.' saat önce yazıldı.';
    }elseif($gun < 7){
    	return $gun.' gün önce yazıldı.';
    }elseif($hafta < 4){
    	return $hafta.' hafta önce yazıldı.';
    }elseif($ay < 12){
    	return $ay.' ay önce yazıldı.';
    }else{
    	return $yil.' yıl önce yazıldı.';
    }
}

//timestamp olarak veri gönderin
echo cevir(1335052012)."<br />";
//ekrana 2 dakika önce yazıldı. yazacak
echo cevir(time()-100);
?>

Yukarıda zamanı ceviren fonksiyonumuzu hazırladık. Ayrıca, fonksiyonu nasıl kullanmanız gerektiğini gösteren iki tane de örnek kullanım şekli de ekledim. Siz isterseniz bu fonksiyonu geliştirerek saat, dakika, saniye gibi bütün sonuçların hepsini döndüren şekle getirebilirsiniz. Böylece bir uygulamamızın daha sonuna geldik, gelecek yazılarda görüşmek üzere.

 2.918 Okunma

Bu yazıya 10 yorum yapılmış.

  1. Verimli bir paylaşım gerçekten. elinize sağlık hocam. ben bu kod parçacıklarını. mesela mysql’dan çektiğim verilere nasıl uyarlayacağım. pek fazla bir bilgim olmadığın dan karışık geldi biraz bu ekran. mesela
    Örnek Makale ekleme forumum.
    Başlık:[ ]
    Özet: [ ]
    İçerik: [ ]
    [Gönder] – [Temizle]

    Bu forum verisinden mysql’a verileri post ediyorum ve verileri görünecek uygun yerlere çekiyorum. bu sizin uygulamayı nereye nasıl uygulayacağım takıldığım burası. Teşekkürler.

  2. $saat = round($fark/(60*60));
    $gun = round($fark/(60*60*24));
    $hafta = round($fark/(60*60*24*7));
    $ay = round($fark/(60*60*24*7*30));
    $yil = round($fark/(60*60*24*7*30*12)); bu şekilde düzenlersek bazı php versiyonlarında çıkan matematiksel hataların da önüne geçmiş olabiliriz. zira ben aynı şekilde kullandığımda ;
    992182564800 yıl önce yazıldı.
    2 dakika önce yazıldı.
    gibi bir çıktı üretti.
    Başarılar

  3. Uygulama çok güzel olmuş emeğinize sağlık fakat uygulama 1. saate kadar dakika bazlı sonuç veriyor, 1. saatden sonra ise 2-3-4 saat vs. olarak sonuç veriyor tam olarak mantığını kuramadım fakat şöyle yapabilir miyiz? Örnek; 1 saat 3 dakika önce vs. teşekkürler.

    • <?php
      function cevir($zaman){
      //şimdiki zaman ile gönderilen zaman farkını bulma
      $fark = time() – $zaman;
      //farkın ne kadar süre yaptığını hesaplama
      $sn = $fark;
      $dk = round($fark/60);
      $saat = round($fark/60*60);

      $saatdakika = round($dk – $saat*60);

      $gun = round($fark/60*60*24);

      $gunsaat = round($saat – $gun*24);

      $hafta = round($fark/60*60*24*7);
      $ay = round($fark/60*60*24*7*4);
      $yil = round($fark/60*60*24*7*4*12);

      //farkın üzerinden ne kadar zaman geçtiğini bulma
      if($sn < 60){
      echo $sn.' saniye önce yazıldı.';
      }elseif($dk < 60){
      return $dk.' dakika önce yazıldı.';
      }elseif($saat < 24){
      return $saat.' saat '.$saatdakika.' dakika önce yazıldı';
      }elseif($gun < 7){
      return $gun.' gün'.$gunsaat.' saat önce yazıldı';
      }elseif($hafta < 4){
      return $hafta.' hafta önce yazıldı.';
      }elseif($ay < 12){
      return $ay.' ay önce yazıldı.';
      }else{
      return $yil.' yıl önce yazıldı.';
      }
      }
      Şeklinde düzenleyerek devam edebilirsiniz. Bu şekilde, 3 gün 4 saat önce, 6 saat 5 dakika önce gibi bir fonksiyon oldu. Geliştirebilirsiniz aynı mantıkla.

  4. Merhaba, veritabanımdaki kayıt tarihlerini d.m.Y H:i:s formatı ile saklıyorum. Yazdığınız uygulamayı bu formata göre nasıl uyarlayabilirim.

  5. Teşekkürler işime çok yaradı.

  6. Çok sağol 🙂

  7. 11142492721920 yıl önce yazıldı.
    olarak çıkıyor acaba veri tabanında veri türü ayarımı yanlış gösterirmisiniz.

    • İşlem önceliğinden dolayı yanlış sonuç veriyor. Bütün çarpma işlemlerini (60*60*24*7) içine alırsanız doğru sonuç veriyor, kolay gelsin.

      • Çarpma ile bölme arasında matematiksel olarak bir işlem önceliğine gerek yoktur, toplama ve çıkarmanın arasında olmadığı gibi.
        Örneğin; 25*3/5 ile (25*3)/5 aynı şeylerdir, faklı olan 25+3/5 ve (25+3)/5 gibi işlemlerdir.

Yazı hakkında görüşlerinizi belirtmek istermisiniz?

Daha fazla Php
Kapat