Mobilhanem.com için hazırladığımız Php derslerimizde bu ders Tarih ve Saat İşlemleri konusunu anlatacağım. 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:
date_default_timezone_set(‘Etc/GMT-3’);
date_default_timezone_set(‘Etc/GMT-3’); |
Php de tanımlı zaman dilimlerine Adresinden ulaşabilirsiniz.
time() Fonksiyonu
time() fonksiyonu şu anki unix timestamp değerini bize verir. Örneğin ben kodumu çalıştırdığımda 1479541808 ş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.
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.
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 listesine Bu Adresten ulaşabilirsiniz. Aşağıda en çok kullanılan karakterleri tablo şeklinde belirteyim .
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 |
yukarıdaki verdiğimiz biçimlendirme karakterlerini date() fonksiyonu içerisinde istedğiniz şekilde kullanabilirsiniz. Birkaç örnek verecek olursak:
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’);
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 sonucumuza ulaşmış oluruz. Hemen kodumuzu yazalım.
date_default_timezone_set(‘Etc/GMT-3’);
$hafta = 60*60*24*7; // 1 haftadaki saniye sayısı
echo date(“d”, time() – $hafta);
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 19u ve kodumuz çıktı olarak 12 sonucunu verdi. Gerçektende 1 hafta önce ayın 12siydi. Doğru sonuca ulaşmış olduk. Geçmişe yönelik işlemler tabiki 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.
date_default_timezone_set(‘Etc/GMT-3’);
$gun = 12;
$ay = 11;
$yil = 2016;
$saat = 11;
$dakika = 32;
$saniye = 28;
echo mktime($saat, $dakika, $saniye, $ay, $gun, $yil);
date_default_timezone_set(‘Etc/GMT-3’);
$gun = 12; $ay = 11; $yil = 2016; $saat = 11; $dakika = 32; $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 19u ile bu ayın 19 u yani bugün arasında kaç gün ve kaç saniye varmış bunları bulalım.
date_default_timezone_set(‘Etc/GMT-3’);
$gun = 19;
$ay = 10;
$yil = 2016;
$saat = 11;
$dakika = 43;
$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ş.
“;
/* ş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ş 🙂 “;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
date_default_timezone_set(‘Etc/GMT-3’);
$gun = 19; $ay = 10; $yil = 2016; $saat = 11; $dakika = 43; $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ş.
/* ş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ş 🙂 “; |
Kodun içerisinde gerekli açıklamaları yaptım arkadaşlar. intval() fonksiyonunu daha öncede görmüştük, parametre olarak aldığı değeri integera çeviriyordu. Bizim değerimizde küsüratlı geldiği için tam küsüratı silmek için intval fonksiyonundan yararlandık.
strtotime() Fonksiyonu
strtotime fonksiyonu parametre olarak aldığı bir tarihi unix timestamp değerini verir. ve bizim için tarih üzerinde işlemler yapar. Ne gibi işlemler yapar örnek verecek olursak:
- +1 day : 1 gün ekler
- +1 week: 1 hafta ekler
- +1 month: 1 ay ekler
- next Monday: 1 sonraki pazartesi
- last Monday 1 önceki pazartesi
gibi değerleri parametre olarak verebiliriz. örneğin:
echo strtotime(“now”), “
“;
echo strtotime(“10 September 2000”), “
“;
echo strtotime(“+1 day”), “
“;
echo strtotime(“+1 week”), “
“;
echo strtotime(“+1 week 2 days 4 hours 2 seconds”), “
“;
echo strtotime(“next Thursday”), “
“;
echo strtotime(“last Monday”), “
“;
echo strtotime(“now”), “ echo strtotime(“10 September 2000”), “ echo strtotime(“+1 day”), “ echo strtotime(“+1 week”), “ echo strtotime(“+1 week 2 days 4 hours 2 seconds”), “ echo strtotime(“next Thursday”), “ echo strtotime(“last Monday”), “ |
Bize saniye cinsinden değerler verir. Mesela bi bugünden sonra ilk pazartesi ayın kaçıymış öğrenmek istersek:
echo date(“d”, strtotime(“next Monday”));
echo date(“d”, strtotime(“next Monday”)); |
Biz sürekli pazartesi yapıyoruz ama bunu diğer günler içinde kullanabilirsiniz. veya hep 1 artırma örneği yaptık ama bunu istedğimiz sayıda artırma azaltma yapabiliriz. Tamamen bizim isteğimize kalmış birşey.
Dersimiz zaten uzun oldu arkadaşlar bunun için bir dersimi daha tarih işlemlerine ayıracağım. Bunlar tarih işlemleri ile ilgili temel şeyler. Henüz OOP yapısını görmediğimiz için belki yaptığımız işlemler zor geliyor olabilir ama oop ye geçince Php de tanımlı DateTime sınıfı sayesinde bu kadar zorlanmadan işlemlerimizi halledebileceğiz ama yine temelinde bu dersimiz yatıyor bunları bilmemiz tabikide gerekiyor 🙂
Bir sonraki dersimiz Php Dersleri – Tarih Ve Saat işlemleri – 2 dersimizde görüşmek üzere kendinize iyi bakın 🙂
Konuyla ilgili yorumlarınızı konu altından yapabilirsiniz, ayrıca sorularınızı yine konu altından ve Mobilhanem Soru&Cevap bölümünden sorabilirsiniz.
Tüm Php Dersleri için tıklayınız..
21