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

30 Aralık 2009

PHP'de tarihleri okunabilir bir formatta yazmak normalde pek öyle zor bir iş falan değil. Adamlar date diye bir fonksiyon yazmışlar, canınızın istediği gibi formatlıyorsunuz. Mesela "January 12, 2009" yazdırmak için "echo date('F j, Y')" yazmanız yeterli.

Tarihleri türkçe formatlamak istediğinizde ise işler biraz karışıyor. Ya php'nin ayarlarını kurcalayacaksınız, ya da oturup kendiniz yazacaksınız. Bir diğer seçenek de aramaya inanmak.

Türkçe Tarih ve Saat Fonksiyonu

Tarih ve saat gösterimini en basit şekilde halledebilmeniz için aşağıdaki göreceğiniz fonksiyonu kullanabilirsiniz. Fonksiyonun çalışma prensibi çok basit: date fonksiyonunu çağırıp aldığı çıktıdaki ingilizce kelimeleri türkçeye çeviriyor. Fonksiyonun dışında kalan diziler de bu çevrimler için zaten. Doğrudan date fonksiyonu kullanıldığı için aldığı parametreler temelde date ile aynı. Sadece işleri biraz daha kolaylaştırmak için bu parametrelerin yeteneklerini arttırdım. Şöyle ki: tarih formatının belirlendiği ilk parametrede ay, gün, yıl gibi türkçe kelimeler; gösterilecek tarihin belirlendiği ikinci parametrede ise tek bir tane yerine çok daha çeşitli formatlarda tarihler kullabiliyorsunuz. Basitçe örneklersek, date('d F Y') fonksiyonunu tarih('d F Y') şeklinde yazabileceğiniz gibi tarih('gun ay yil') şeklinde de yazabilirsiniz (çıktısı '17 Mayıs 2009' gibi birşey olacaktır).

Kullanım

tarih($format, [$zaman]);
$format

Biçilendirilecek tarihin formatı. String içerisine yazılan format bilgilerinden oluşur ('d-F-Y' gibi). date fonksiyonunda kullanılan seçeneklerin hepsi bu değişken için de geçerlidir. php.net: date fonksiyonu adresinde detaylı seçenekleri görebilirsiniz. Bu sayfada belirtilen seçeneklerin yanı sıra aşağıda belirtilen türkçe değerler de kullanılabilir.

Biçim Açıklama Örnek sonuç
gun Ay günlerinin sıfır dolgulu iki haneli gösterimi 01'den 31'e
kisagun Ay günlerinin sıfır dolgusuz gösterimi 1'den 31'e
hgun Hafta günlerinin tam metinsel gösterimi Pazar'dan Cumartesi'ye
hgunkisa Ay günlerinin iki harfli metinsel gösterimi Pzt'den Paz'a
ay Ayın tam metinsel gösterimi, Ocak ya da Mart gibi Ocak'tan Aralık'a
kisaay Ayın üç karakterli, metinsel kısa gösterimi Oca'dan Ara'ya kadar
aysayi Ayın sıfır dolgulu sayısal gösterimi 01'den 12'ye
kisaaysayi Ayın sıfır dolgusuz sayısal gösterimi 1'den 12'ye kadar
yil Yılın 4 haneli sayısal, tam gösterimi 1999 ya da 2003 gibi
kisayil Yılın iki haneli gösterimi 99 ya da 03 gibi
saat Saatin, 24-saatlik sıfır dolgulu gösterimi 00'dan 23'e
kisasaat Saatin, 12-saatlik sıfır dolgulu gösterimi 01'den 12'ye
dakika Sıfır dolgulu dakika gösterimi 00 ile 59 arasında
saniye Sıfır dolgulu saniye gösterimi 00 ile 59 arasında
Örnek format Örnek sonuç
'ay, yil' Ocak, 2010
'kisagun ay, hgun' 7 Ocak, Pazartesi
'gun-aysayi-kisayil saat:dakika:saniye' 07-01-10 12:10:54
$zaman:

Biçimlendirilecek zamanı belirtir. Eğer girilmemişse o anki zaman kullanılır. $zaman değeri strtotime fonksiyonun kabul ettiği tüm değerler olabilir. MySQL veritabanından aldığınız değerleri doğrudan kullanabilirsiniz. Aşağıda bu parametrenin alabileceği bazı değerler örneklenmiştir:

  • '31-12-2009 13:23:10'
  • '2009-12-31 13:23:10'
  • '31-12-2009'
  • '3 gun once'
  • '-3 gun'
  • '+5 gun'
  • '2 yil sonra'

Kullanım Örnekleri

echo tarih("gun/ay/yil saat:dakika:saniye")."; ";
// çıktısı: 30/Aralık/2009 01:06:58;
echo tarih("gun-ay-yil, hgun saat:dakika", "3 gun once")."; ";
// çıktısı: 27-Aralık-2009, Pazar 01:06;
echo tarih("kisagun-kisaaysayi-kisayil, hgun saat:dakika", "+2 ay")."; ";
// çıktısı: 2-3-10, Salı 01:08;
echo tarih("yil.ay.gun saat:dakika:saniye", "2009-12-20 12:10:23")."; ";
// çıktısı: 2009.Aralık.20 12:10:23;
echo tarih("gun ay yil saat:dakika", "20081118100630");
// çıktısı: 18 Kasım 2008 10:06

Kod

$aylarIng = array(
	"January", "February", "March", "April", "May", "June", 
	"July", "August", "September", "October", "November", "December"
	);
$aylarKisaIng = array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
$gunlerIng = array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday");
$gunlerKisaIng = array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun");
$aylar = array(
	"Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", 
	"Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"
	);
$aylarKisa = array("Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara");
$gunler = array("Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar");
$gunlerKisa = array("Pt", "Sa", "Ça", "Pe", "Cu", "Ct", "Pa");

/**
 * tarihi turkceye cevirir. tarih temelde date fonksiyonu ile olusturulur.
 * $zaman ise strtotime ile timestamp'e cevrilir. $format'in kullanımi
 * date fonksiyonunda oldugu gibidir. ayni sekilde  $zaman'in alacagi degerler
 * strtotime fonksiyonuna uygun secilebilir.
 *
 * @global array    $aylarIng, $aylar, $gunlerIng, $gunler, $aylarKisaIng,
 *                      $aylarKisa, $gunlerKisaIng, $gunlerKisa
 * @param str       $format
 * @param str/int   $zaman
 * @return str
 */
function tarih($format, $zaman=null){
    if(!$zaman) $zaman = time();
    else{
        $zaman = str_ireplace(
                array("once","ay", "gun", "yil","dakika","saniye","hafta"),
                array("ago","month","day","year","minute","second","week"), 
                $zaman);
        $zaman = strtotime($zaman);
    }
    $format = str_ireplace(
                array("kisaaysayi","kisaay","aysayi","kisagun","hgunkisa","hgun","gun","kisayil","yil",
                        "kisasaat","saat","dakika","saniye", "ay"),
                array("n",         "M",     "m",     "j",      "D",       "l",   "d",  "y",      "Y",  
                        "h",       "H",   "i",     "s",      "F"),
                $format);
    $tarihStr = date($format, $zaman);
    if(strpos($format, "F") !== false){
        global $aylarIng, $aylar;
        $tarihStr = str_replace($aylarIng, $aylar, $tarihStr);
    }
    if(strpos($format, "l") !== false){
        global $gunlerIng, $gunler;
        $tarihStr = str_replace($gunlerIng, $gunler, $tarihStr);
    }
    if(strpos($format, "M") !== false){
        global $aylarKisaIng, $aylarKisa;
        $tarihStr = str_replace($aylarKisaIng, $aylarKisa, $tarihStr);
    }
    if(strpos($format, "D") !== false){
        global $gunlerKisaIng, $gunlerKisa;
        $tarihStr = str_replace($gunlerKisaIng, $gunlerKisa, $tarihStr);
    }
    return $tarihStr;
}

SetLocale ile Türkçe Tarih & Saat

Aslında strftime fonksiyonunu kullanarak da türkçe tarih gösterebiliyorsunuz. Fakat bunun için sunucunun bölgesel ayarlarının türkçe olacak şekilde değiştirilmiş olması gerekiyor. Bu ayar yapılamamış olsa bile eğer sunucunuz buna izin veriyorsa PHP kodunuzun başına bir yerlere setlocale(LC_TIME, 'tr_TR'); satırını ekleyerek bölgesel ayarları türkçeye uygun hale getirebilirsiniz. Test için şu php kodunu suncunuzda çalıştırınız:

setlocale(LC_TIME, 'tr_TR');
echo strftime('%A, %d. %B %Y');

Eğer "Salı, 05. Ocak 2010" gibi bir sonuç alıyorsanız bu yöntemi kullanabilirsiniz.

Kaynaklar:

'date' fonksiyonu

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.