PHP Tarih Ve Saat İşlemleri Nasıl Yapılır?

PHP tarih ve saat işlemleri bizim genellikle ihtiyaç duyduğumuz ve olmazsa olmazlarımızdandır. Php de tarih 1 Ocak 1970 den başlar ve her saniye artar. Yani bir sayacımız olduğunu düşünün sayaç 1 ocak 1970 te sıfır değerindeyken dersimizi yayınlarken 123456789 gibi bir değere ulaşmıştır.  Bu değer unix zaman damgası (unix timestamp) olarak adlandırılır.  Php bizim bu sayıyla uğraşmamamız için bunu arka planda kendisi tarihe çevirir ve bize tarih cinsinden neye denk geldiğini söyler.  Şimdi yavaş yavaş tarih ve saat işlemlerine giriş yapalım.

date_default_timezone_set() Fonksiyonu

date_default_timezone_set() fonksiyonu bizim default zaman dilimini belirlememizi sağlar. ve parametre olarak hangi zaman diliminde işlemler yapacaksan bunu vermemiz gerekir.

Tarih ve saat işlemlerine başlamadan önce sunucuya biz şu saat dilimini kullanıyoruz bizim tarih ve saatimizi bu zaman diliminde ver gibisinden ifadelere yer vermek zorundayız. Örneğin: bu yıl saatlerin geri alınmamasıyla beraber neredeyse tüm web sitelerinde uygulamalarda saati hep 1 saat geride gösteriyordu. İşte bu ayarı düzgün yapmazsak bazen yanlış saat alıp yanlış işlemler yapabiliriz.

Doğru zaman dilimi kullanmazsak tarih ve saat işlemlerinde sürekli hatalar yaparız. Bu yüzden 19.11.2016 tarihinde Türkiye için doğru timezone değeri ‘Etc/GMT-3’ değeridir. Bu değeri date_default_timezone_set fonksiyonuna parametre verirseniz doğru tarih ve saat işlemleri yapabilirsiniz.

Örneğin:

<?php
date_default_timezone_set('Etc/GMT-3');
?>

Php de tanımlı zaman dilimlerine buraya tıklayarak ulaşabilirsiniz.

time() Fonksiyonu

time() fonksiyonu şu anki unix timestamp değerini bize verir. Örneğin ben kodumu çalıştırdığımda  1585384967  şeklinde bir çıktı aldım.

date() Fonksiyonu

date() fonksiyonu bize o anki zamanı gün ay yıl saat dakika saniye cinsinden verir ve çok esnek bir fonksiyondur istediğimiz sırayla bize çıktı verebilir.  Fonksiyonumuz iki parametrelidir birinci parametre zaman biçimimiz ikinci parametre ise unix timestamp değeridir. ikinci parametreyi biz eklemezsek bu parametre php tarafında o anki timestamp değeri yani time() fonksiyonudur.

Örneğin: gün.ay.yil saat:dakika:saniye şeklinde çıktı almak istersek aşağıdaki gibi bir parametre ile fonksiyonumuzu çağırmamız gerekir.

<?php
date_default_timezone_set('Etc/GMT-3');
echo date("d.m.Y  H:i:s");
echo date('d.m.Y H:i:s', time());
// ikiside aynı sonucu verir. 
?>

Örneğimizdeki d,m,y gibi değerleri biz kafamızdan sallamadık tabikide 🙂 Bu değerler php tarafından belirlenmiş değerlerdir. Bu değerlere zaman biçimlendirme karakterleri denir. Bütün karakter listesin buraya tıklayarak ulaşabilirsiniz. Aşağıda en çok kullanılan karakterleri tablo şeklinde belirteyim .

HarfAçıklamasıÖrnek
d İki haneli şeklinde günü verir 28
m İki haneli şeklinde ayı verir 03
Y Dört haneli şeklinde yılı verir 2020
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 Saturday

yukarıdaki verdiğimiz biçimlendirme karakterlerini date() fonksiyonu içerisinde istedğiniz şekilde kullanabilirsiniz. Birkaç örnek verecek olursak:

<?php
date_default_timezone_set('Etc/GMT-3');
// Örnek sonuç: 19.11.2016 11:18:10
echo date('d.m.Y H:i:s');
 
// Örnek sonuç: Saat: 11:18
echo 'Saat: ' . date('H:i');
 
// Örnek sonu: 19 November 2016 Saturday
echo date('d F Y l');
?>

Geçmiş Zaman İşlemleri

Bazen geçmişe yönelik işlemler yapmamız gerekebilir. Örneğin bir hafta önce bugün ayın kaçıydı ?

Basitçe düşünecek olursak time() fonksiyonu bize 1970 ten bu güne geçen saniye sayısını veriyordu. Bir haftalık saniyeyi hesaplarsak bunu time() fonksiyonundan çıkarsak sonuca ulaşmış oluruz. Hemen kodumuzu yazalım.

<?php
date_default_timezone_set('Etc/GMT-3');

$hafta = 60*60*24*7; // 1 haftadaki saniye sayısı 

echo date("d", time() - $hafta);
?>

Bugün ayın 28’i ve kodumuz çıktı olarak 21 sonucunu verdi. Gerçekten de 1 hafta önce ayın 21’iydi. Doğru sonuca ulaşmış olduk. Geçmişe yönelik işlemler tabi ki bu kadar kolay değil mesela iki tarih arasında kaç gün var ? Bunun gibi işlemler için biraz daha işin detayına girmeliyiz.

mktime() Fonksiyonu

mktime() fonksiyonu bizim istediğimiz bir tarihin unix değerini bize veriyor. Bu fonksiyon sayesinde istediğimiz bir tarihin unix değerini öğrenebiliyoruz. Fonksiyonumuzun 6 tane parametresi var. Parametreleri sırasıyla saat, dakika, saniye, ay, gün, yıl şeklindedir. hemen bir örnek verecek olursak:

Dersi yazdığım günden bir hafta öncesinin unix değerini bulalım.

<?php
date_default_timezone_set('Etc/GMT-3');
 
$gun = 28;
$ay = 03;
$yil = 2020;
$saat = 11;
$dakika = 50;
$saniye = 28;
 
echo mktime($saat, $dakika, $saniye, $ay, $gun, $yil);
?>

mktime fonksiyonu tek başına basit gibi görünse de iki üç dört tarih ile alakalı işlemler yaparken kafanız biraz karışabilir. Bu yüzden temel mantığını yani 1970 ten bu güne geçen saniye sayısını unutmamakta çok fayda var.

Mesela bir önceki ayın 28’i ile bu ayın 28’i yani bugün arasında kaç gün ve kaç saniye varmış bunları bulalım.

<?php
date_default_timezone_set('Etc/GMT-3');

$gun = 28;
$ay = 02;
$yil = 2020;
$saat = 11;
$dakika = 50;
$saniye = 28;

$gecenayUnixDegeri =  mktime($saat, $dakika, $saniye, $ay, $gun, $yil);
$buAyUnixDegeri = time();

$saniyeFarki = $buAyUnixDegeri - $gecenayUnixDegeri;
echo "Geçen aydan bu aya toplam $saniyeFarki saniye geçmiş. <br/>";

/* şimdi elimizde bir saniye değeri var ama bu saniye değeri 1970 den başlamıyor bunu nasıl gün olarak ifade ederiz? 

Evet tamda düşündüğünüz gibi saniyeyi gün cinsinden ifade edelim. 

1 gün 60*60*24 saniyedir elimizdeki saniyeyi 1 güne bölersek kaç gün olduğunu buluruz :) 


*/

echo " Toplam ".intval($saniyeFarki/(60*60*24))." Gün Geçmiş :) ";
?>

Türkçe Tarih

Türkçe tarih yapmak için bir çok yöntem var ama biz bunlardan ikisini göreceğiz. Zaten geliştirilen diğer yöntemlerde bizim göreceğimiz iki yöntem üzerinden geliştiriliyor. Tarih Türkçeleştirme yöntemlerine bakacak olursak:

strftime() Fonksiyonu

strftime() fonksiyonu tarihi yerel dile göre tarih çıktısı almamızı sağlar. İyi güzelde bizim yerel dilimiz ne ?

Yerel dili ayarlamak için setlocale fonksiyonundan yararlanıyoruz.

setlocale(LC_TIME,”tr_TR.UTF-8″);  yerel dili türkçe utf-8 olarak ayarladık.

Strftime fonksiyonu da date fonksiyonu gibi içine d, m, y gibi karakterler alıyor. Bu karakter listesine aşağıdan ulaşabilirsiniz.

Harf Açıklaması Örnek
%e Günü sıfır dolgusuz verir 28
%m İki haneli şeklinde ayı verir 03
%Y Dört haneli şeklinde yılı verir 2020
%H İki haneli ve 24 saat formatında saati verir 19
%M İki haneli şeklinde dakikayı verir 59
%S İki haneli şeklinde saniyeyi verir 55
%A Haftanın gününün adını verir Cumartesi
%B Ayın adını verir Mart

Dersimizi burada sonlandırıyorum. Bir sonraki dersimiz olan ve işimizi oldukça kolaylaştıracak olan Php Dersleri – Fonksiyonlar dersimizde görüşmek üzere.

Konuyla ilgili yorumlarınızı konu altından yapabilirsiniz, ayrıca sorularınızı yine konu altındaki yorum bölümünden sorabilirsiniz.

PHP tarih ve saat işlemleri konusunu bu yazımızda gördük. Aşağıdaki linke tıklayarak daha bir çok içeriğe ulaşarak bilginizi artırabilirsiniz. Ayrıca aşağıdaki Sosyal Medya linklerine tıklayarak bizi Sosyal Medya üzerinden de takip edebilirsiniz.

https://yazilimdelisi.com/category/web-gelistirme/php/

Sosyal Medya Hesaplarımız

instagram logo
twitter logo

En Son Eklenen Yazılar

Bir Cevap Yazın

%d blogcu bunu beğendi: