Genel Php

PHP ile tarih ve saat

Zaman hızla ilerliyor, bunu çalışmalarımızda sağlıklı ve fonksiyonel bir şekilde sunabilmek için PHP ile tarih ve saat ifadelerinden bahsedeceğim.
Tarih verilerini kullanmaya başlamadan önce yapmamız gereken bir takım ayarlar var. Bunlardan ilki doğru saat ve tarihe ulaşabilmek için hangi il, ülke ya da zaman diliminde olduğumuzu sunucuya belirtmek.
Bunun için “date_default_timezone_set” fonksiyonu ile bizim zaman dilimimizin belirtecini giriyoruz. Eğer farklı diyarların zaman dilimi belirteçlerini merak ediyorsanız şuradan bakabilirsiniz. Bu fonksiyonu uygulamanızın ayar dosyalarının içerisine, tarih fonksiyonlarını kullanmadan önce yazmalısınız.

Saat kaç?

İstediğimiz zaman birimini ya da formatını alıp ekrana yazmak için date fonksiyonunu kullanıyoruz. Kullanımı gayet basit olan bu fonksiyonun içerisinde kullanacağımız biçim karakterlerini öğrenmek için öncelikle şuradaki tabloya bakabilirsiniz.
Ben burada sadece en çok kullanılanlarından bahsedeceğim:

Harf Açıklaması Örnek
d İki haneli şeklinde günü verir 27
m İki haneli şeklinde ayı verir 07
Y Dört haneli şeklinde yılı verir 2013
H İki haneli ve 24 saat formatında saati verir 19
i İki haneli şeklinde dakikayı verir 38
s İki haneli şeklinde saniyeyi verir 59
l (küçük L) Haftanın gününün ingilizce adını verir Monday
F Ayın ingilizce adını verir July

Yukarıdaki tabloya göre tarih ve zamanları ifade etmek için kullanacağımız biçimler şöyle;

Unix time

PHP tarih ve zaman ifadelerinde unix zaman damgasını kullanır. Unix timestamp en basit ifadeyle “1 Ocak 1970 00:00:00” tarihinden itibaren günümüze kadar geçen saniye sayısıdır.
Şuanın unix zaman damgasını almak için için time fonksiyonunu kullanacağız. Örneğin ben bu yazıyı hazırlarken ki zamana göre elde ettiğim değer aşağıdaki gibi;

Bu sayıyı önce saniyelere, dakikalara, saatlere ve günlere bölerek tam tarihe ulaşabilirsiniz, fakat date fonksiyonu bu işlemleri sizin için otomatik olarak yapıyor. Veritabanında tarihi saklamanın ucuz ve performanslı yollarından birisidir.

Zamanda yolculuk

Date fonksiyonuna ikinci parametre olarak unix zaman damgasında bir değer girerseniz o girdiğiniz değerin tarihini yazar. Örneğin yukarıda time fonksiyonu ile o anki zamanı aldık ve veritabanına yazdık diyelim, sonrasında tarihi göstermek istediğimizde date fonksiyonunun ikinci parametresine bu değeri yerleştirmemiz yeterli. Bu sefer bize anlık zamanı değil ona gönderdiğimiz değerin zamanını istediğimiz biçimde döndürecektir.

// 29.07.2013 03:30:36 echo date(‘d.m.Y H:i:s’, 1375057836); // 03:30:36 echo date(‘H:i:s’, 1375057836);

Aynı mantıkta anlık bir dakika öncesini almak için şöyle bir ifade kullanabiliriz;

Zaman oluşturmak

Yukarıdaki örneklerde anın damgasını aldık ya da daha önce aldığımız zamanı yazdırdık. İstediğimiz bir zamanın unix zaman damgasını almak için mktime fonksiyonu geliyor.
Parametreleri sırasıyla şöyle; saat, dakika, saniye, ay, gün, yıl.

Örneğin yukarıda 29 Kasım 1992 12:20:59 zamanının unix zaman damgasını elde ettik.

Zaman farkını hesaplamak

Unix zaman damgasının değeri saniye olduğu için iki değeri birbirinden çıkarttığımızda aralarındaki saniye farkına ulaşmış oluruz. Bu sayede iki farklı zaman arasında geçen süreyi hesaplayabiliriz.
Fakat elimize geçecek sonuç saniye olduğu için eğer 60’dan büyük ise 60’a bölüp dakikayı, eğer dakika sayısı da 60’dan büyükse saat farkı olduğunu ifade etmemiz gerekir.
Örneğin ben yine yukarıda oluşturduğum 1992 yılına ait zaman damgası ile günümüz arasındaki farkı bulduracağım.

Benim bu çalışmayı denediğim ana göre aldığım çıktı şu şekilde;

İki zaman arasında 652451613 saniye geçmiş. Bu aslında benim şu zamana kadar yaşadığım saniye sayısı oluyor ? Gelin şimdi bunu zaman birimlerine bölelim ve daha anlaşılır bir biçime sokalım.

Benim bu çalışmayı denediğim ana göre aldığım çıktı şu şekilde;

İki zaman arasında 652451613 saniye geçmiş. Bu aslında benim şu zamana kadar yaşadığım saniye sayısı oluyor ? Gelin şimdi bunu zaman birimlerine bölelim ve daha anlaşılır bir biçime sokalım.

Bu işlemin sonucunda da şöyle bir sonuçla karşılaşıyoruz.

Yani doğduğum günden bugüne geçen zamanım buymuş.

Tarihi unix zaman damgasına çevirmek

Strtotime fonksiyonu ile yazılı tarihi unix zaman damgasına çevirebiliriz. Zaman ifadeleri haricinde bir takım İngilizce ifadeleri de kullanabiliyoruz.

Kullanıcılarınıza tarih girmelerini istediğinizde, girdikleri tarihi bu fonksiyondan geçirip veritabanınızda unix formatında saklayabilirsiniz. Fonksiyon eğer anlayamadığı bir biçim ile karşılaşırsa false dönecektir.

Tarihi Türkçe yazdırmak

Date fonksiyonu ayı ve haftanın günlerini İngilizce olarak veriyor. Bu nedenle tarihi Türkçe yazdırmak istediğimizde 2 farklı seçeneğimiz var. Birincisi eğer kodlarımızı çalıştıracağımız sunucuda Türkçe dil desteği var ise iki fonksiyonla olayı gerçekleştirebiliyoruz.

1. Yöntem (Eğer sistemde Türkçe dili tanımlıysa)

Önce setlocale fonksiyonu ile zaman işlemlerinde kullanacağımız dilimizi ifade ediyoruz. Sonrasında strftime fonksiyonu ile ifade ettiğimiz dilde zaman çıktısını alıyoruz. Strftime fonksiyonunun biçim karakterleri date fonksiyonunkilerinden farklı, yine tüm biçim karakterleri için şuraya bakabilirsiniz fakat ben bizim kullanacaklarımızı tanıtacağım.

Harf Açıklaması Örnek
%e Günü sıfır dolgusuz verir 27
%m İki haneli şeklinde ayı verir 07
%Y Dört haneli şeklinde yılı verir 2013
%H İki haneli ve 24 saat formatında saati verir 19
%M İki haneli şeklinde dakikayı verir 38
%S İki haneli şeklinde saniyeyi verir 59
%A Haftanın gününün adını verir Perşembe
%B Ayın adını verir Ocak
Eğer sunucunuz Türkçe’yi biliyorsa bu kadar kolay, fakat bilmiyorsa alternatif ve birazda manuel olarak diğer yöntemi uygulamalıyız.

2. Yöntem

Bu sefer date fonksiyonu ile kaçıncı ayda ve haftanın kaçıncı gününde olduğumuzu alıp, kendi tanımladığımız dizilerden ay ve gün isimlerini eşleştireceğiz. Yukarıda anlattıklarımın dışında; haftanın kaçıncı günü olduğu veren “N“, günü sıfır dolgusuz veren “j” karakterini kullanacağız.

Eğer dilerseniz bu dizini ve ifadeyi kullanarak kendinize bir fonksiyon hazırlayabilirsiniz.

Yorum yaz