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.