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

30 Aralık 2009

Kolaylıkların dili PHP ile tarih formatlamak gerçekten kolay bir iş ama sadece ingilizce siteler için. İngilizce bir sitede tarih göstermek için tek ihtiyacınız ‘date‘ fonksiyonu. İlk parametre olarak gireceğiniz belirli karakterlerle tarihi istediğiniz gibi gösterebilirsiniz. Mesela ‘January 12, 2009‘ yazdırmak için ‘echo date(”F j, Y”)‘ yazmanız yeterli olacaktır.

Türkçe Tarih & 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).

Tanımlama:

tarih($format, [$zaman]);
$zaman ile belirtilen zamanı ilk parametrede belirtilen formatta biçimlendirir. $zaman parametresi girilmemişse çalışma zamanındaki zaman kullanılır.

Parametreler:

$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;
}

Kaynaklar:
‘date’ fonksiyonu

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:
’strftime’ fonksiyonu
’setlocale’ fonksiyonu

Bu yazıyı oylayın

1 Yıldız2 Yıldız3 Yıldız4 Yıldız5 Yıldız (3 oy, ortalama: 4,67 / 5)
Loading ... Loading ...



Yorumlar

Tek cevap to “PHP ile Türkçe Tarih Gösterimi-Çevrimi”
  1. [...] 2009′, ‘07-Ağustos-2008, Cumartesi’ gibi şekillerde yazdırmak istiyorsanız PHP ile Türkçe Tarih Gösterimi-Çevrimi başlıklı yazıya gözatmanız daha doğru olur. /** * verilen tarihler arasında geçen süreyi [...]

Yorum bırakın