PHPYazılım

PHP Dersleri #20 – Tarih ve Zaman İşlemleri

kodportali.comPHP derslerine kaldığı yerden tüm hızıyla Tarih ve Saat ile devam ediyoruz.

Başlangıç

Tarih ve Saat bir çok projede sık sık kullanılır ve bunu fonksiyonel, hızlı bir şekilde kullanmak önemlidir. Öyleyse hadi başlayalım. Öncelikle bulunduğumuz ülkenin zaman dilimini belirtip, sistemin zaman dilimini ona ayarlayalım.

date_default_timezone_set('Europe/Istanbul');

Biz Türkiye ‘de yaşadığımız için zaman dilimini İstanbul ‘a göre ayarladık. Siz hangi ülkedeki zaman dilimine tabiseniz buraya tıklayarak tüm zaman dilimlerine bakabilirsiniz.

Şu An Saat Kaç?

Başlamadan önce, saati yazdırmak için date fonksiyonunu kullanacağız ve içinde kullanacağımız biçim karakterlerini öğrenmemiz gerekiyor. Hemen bir tablo ile çok kolay bir şekilde anlatacağım.

Harf Açıklaması Örnek
d Günü iki haneli biçimde verir. 04
m Ayı iki haneli biçimde verir. 10
Y Yılı dört haneli biçimde verir. 2019
H Günün saatini, 24 saat biçimde ve iki haneli olarak verir. 10
i Dakikayı iki haneli biçimde verir. 40
s Saniyeyi iki haneli biçimde verir. 03
l Haftanın gününü ingilizce olarak verir. Saturday
F Ayın adını ingilizce olarak verir. May

Biz bu tabloda en çok kullanacağınız, daha doğrusu sık sık kullanacağınız biçim karakterlerini verdik fakat daha ayrıntılı şekilde incelemek istiyorsanız buraya tıklayarak, buna benzer daha ayrıntılı bir tablo görebilirsiniz. Hadi nasıl kullanacağımıza geçelim;

$date = date('d-m-Y H:i:s');
echo $date;

Kodumuzu çalıştırdığımız zaman şöyle bir çıktı elde ederiz;

04-05-2019 09:51:31

Şu an bu yazının yazıldığı zamanı döndürdü. Devam edelim.

echo 'Bugün günlerden ' . date('l');

Çıktımız;

Bugün günlerden Saturday

Tablodada yazdığımız gibi ‘l‘ karakteri günü ingilizce olarak verir. Saturday türkçe olarak Cumartesi demek, yani doğru bir şekilde yazdırdı.

echo date('d F Y l'); // Çıktı: 04 May 2019 Saturday

Buda saat olmadan örnek bir kullanımdı.

Unix Timestamp

Unix Timestamp sadece PHP ‘ye özel bir şey değildir. Hemen hemen her programlama dilinde bulunur. Unix Zaman Damgası, size “1 Ocak 1970 00:00:00”  tarihinden itibaren, o ana kadar geçen saniyeyi verir. Ayrıca 9 Eylül 2001 saat 04:46:40 itibarı ile Unix Zaman Damgası 10 haneye yükselmiştir. Ve 20 Kasım 2286 saat 19:46:40‘ta 11 haneye yükselecektir. Unix Timestamp ‘ı almak için time fonksiyonunu kullanacağız.

echo time(); // Çıktı: 1537281113

Direk fonksiyonu yazarak herhangi bir parametre girmeden ekrana yazdırdık ve gördüğünüz gibi sayısal biçimde bize 1970’den itibaren şu ana kadar geçen saniyeyi yazdırdı.

Unix Timestamp ‘ı Yazısal Biçime Çevirmek

İlk örneğimizde o anın zamanını yazdırmışdık. Peki elimizde Unix Zaman Damgası biçiminde bir veri var ve biz bunu yazdırmak istiyoruz o zaman ne yapacağız. Çok kolay. Yine date fonksiyonunu kullanacağız fakat 1 parametre fazla gireceğiz.

$now = date('d-m-Y H:i:s', time());
$now2 = date('d-m-Y H:i:s', 1556958234);

echo $now . PHP_EOL . $now2;

Kodumuzun çıktısı;

04-05-2019 10:24:42
04-05-2019 10:23:54

İlk değişkenimizde direk o anın Unix Zaman damgasını aldık ve yazdırdık, ikincisinde ise önceden kaydettiğimiz bir verimiz var diyelim o veri olarak kabul ettik ve yazdırdık. Yaklaşık 1 dakika öncesini yazdırdı. Aynı zamanda bu yöntemle zamanda geleceğe veya geçmişe gidebilirsiniz. Örnek ile daha açıklayıcı hale getirelim.

$now = time();
echo date('d.m.Y H:i:s', $now + 60); // Bir dakika ileri geleceğe gittik
echo PHP_EOL;
echo date('d.m.Y H:i:s', $now - 60);  // Bir dakika geri geçmişe gittik

Kodumuzun çıktısı;

04.05.2019 10:32:11
04.05.2019 10:30:11

Biz bunu yazarken saat 10:31:11 idi ve ilkinde bir dakika ileri ve ikincisinde bir dakika zamanda başarıyla geri gittik.

Kendi Zamanımızı Oluşturmak

Diyelim ki bir tarihi Unix Zaman Damgasında almak istiyoruz. Peki bunu nasıl yapıcaz? Çok kolay mktime fonksiyonu ile kendi zamanımızı oluşturacağız ve bize o tarihin Unix Zaman Damgasını vericek.

$unix = mktime(24, 12, 55, 10, 6, 2030);
echo $unix;
echo PHP_EOL;
echo date('d F Y l', $unix);

Kodun çıktısı;

1917555175
07 October 2030 Monday

mktime fonksiyonunun parametreleri sırasıyla saat, dakika, saniye, ay, gün ve yıl dır. Gördüğünüz gibi 7 Ocak 2030 Pazartesi tarihini ve o tarihin Unix Time Damgasını elde ettik.

İki Zaman Arasındaki Zaman Farkını Hesaplamak

Diyelimki biz 2020 yılına ne kadar zaman kaldığını bulmak istiyoruz. Çok kolay bir şekilde iki zaman arası tarihi hesaplıcaz.

function diffTime(int $finish) : string{
    $now = new \DateTime();
    $finishDateTime = new \DateTime();
    $finishDateTime->setTimestamp($finish);
    $finishDate = new \DateTime((string)$finishDateTime->format('Y-m-d H:i:s'));
    $remainingTime = $now->diff($finishDate);
    return $remainingTime->format('%m Ay, %d Gün, %H Saat, %i Dakika, %s Saniye');
}

echo "2020 yılına " . diffTime(mktime(0, 0, 0, 1, 1, 2020)) . " kaldı.";

Yukarıdaki kodun çıktısı;

2020 tarihine 7 Ay, 27 Gün, 13 Saat, 6 Dakika, 59 Saniye kaldı.

diffTime adında bir fonksiyon yarattık içindeki işlemleride kısaca açıklamak gerekirse, öncelikle DateTime PHP’ de bulunan bir sınıfdır. Şimdiki zamanı oluşturduk, daha sonra bir zaman daha oluşturpp zaman damgasını farkını hesaplamak istediğimiz zamanın zaman damgasını girdik. Daha sonra bitiş tarihini yine yeni bir DateTime sınıfı açarak içine string formatında yazdık ve şimdiki zamana diff ettik. Yani farkını hesaplayıp değişkene atadık. Daha sonra bir format belirleyip return ettik. Yazdırırkende mktime ile 2020 tarihini yarattık ve birinci parametreye girdik. Gördüğünüz gibi en son ekrana ayrıntılı bir biçimde yazdırdık.

Tarihi Unix Timestamp’a Çevirmek

Yazılı bir tarihi strtotime fonksiyonu ile çok kolay şekilde unix time biçimine çevirebiliyor, geleceğe veya geçmişe gidebilirsiniz. Hemen örnekler ile açıklayalım;

echo strtotime('now') . PHP_EOL;
echo strtotime('10 September 2000') . PHP_EOL;
echo strtotime('+1 day') . PHP_EOL;
echo strtotime('+1 week') . PHP_EOL;
echo strtotime('+1 week 2 days 4 hours 2 seconds') . PHP_EOL;
echo strtotime('next Thursday') . PHP_EOL;
echo strtotime('last Monday');

Kodumuzun çıktısı;

1556962092
968536800
1557048492
1557566892
1557754094
1557352800
1556488800

Gördüğünüz gibi size Unix Timestamp biçiminde verdi girdiğiniz tarihleri.

Tarihi Türkçe Yazdırmak

Peki tarihi nasıl Türkçe yazdıracağız? Normalde ingilizce çıkıyor. Bu için size size iki yöntem sunuyoruz.

Yöntem #1

Bu yöntemimizde strftime fonksiyonunu kullanacağız fakat bu yöntem sisteminizde Türkçe dil desteği var ise çalışır. Nasıl yapılacağına geçersek önce setlocale fonksiyonu ile sistemimizin zamanını Türkçe ‘ye ayarlayıp sonra tekrar denicez. Ayrıca bu fonksiyondada biçim karakterleri vardır. Yine en çok kullanacağınız biçim karakterlerini tablo biçiminde vereceğiz fakat daha ayrıntılı bakmak istiyorsanız buraya tıklayarak daha ayrıntılı bir tablo görebilirsiniz.

Harf Açıklaması Örnek
%e Günü dolgusuz şekilde verir. 24
%m Ayı iki haneli biçimde verir. 05
%Y Yılı dört haneli biçimde verir. 2019
%H Günün saatini, 24 saat biçimde ve iki haneli olarak verir. 13
%M Dakikayı iki haneli biçimde verir. 03
%S Saniyeyi iki haneli biçimde verir. 54
%A Haftanın gününün adını verir. Cumartesi
%B Yılın ayının adını verir. Mayıs

Örneğimize geçelim;

setlocale(LC_TIME, 'tr_TR'); // Sistemin zaman dilini Türkçe olarak ayarlıyoruz
 
echo strftime('%e %B %Y %A %H:%M:%S'); // Tarihi yazdıracağımız biçimi belirtiyoruz
// Örnek Çıktı: 4 Mayıs 2019 Cumartesi 12:38:00

Gördüğünüz gibi sistem Türkçe olduğunda tarihde türkçe çıkıyor. Peki sisteminizde Türkçe dil desteği yoksa ne yapacağız? O zaman size ikinci yöntemimizi kullanmanızı tavsiye ediyoruz. Hadi ikinci yönteme geçelim.

Yöntem #2

function unixTimeTranslateToString(int $unixTime) : string{
    static $monthsEnglish = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
    static $monthsTurkish = ['Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık'];

    static $daysEnglish = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
    static $daysTurkish = ['Pazartesi', 'Salı', 'Çarşamba', 'Perşembe', 'Cuma', 'Cumartesi', 'Pazar'];

    return str_replace(array_merge($monthsEnglish, $daysEnglish), array_merge($monthsTurkish, $daysTurkish), date('d F Y l H:i:s', $unixTime));
}

echo unixTimeTranslateToString(strtotime('now'));

Yukarıdaki kodumuzun çıktısı;

04 Mayıs 2019 Cumartesi 11:46:55

Yeni bir fonksiyon yarattık ve içine girdiğimiz Unix Zaman Damgasını türkçe şekilde tarih veriyor. Bu fonksiyon ile çok kolay şekilde Türkçe şekilde tarihi yazdırabilirsiniz.

 

Evet bu dersimizinde burada sonuna geldik. Herhangi bir sorunuz olursa yorumlarda sorabilirsiniz.

Sitemizdeki tüm PHP dersleri için buraya tıklayabilirsiniz.

Oylamak için tıklayınız :
[Toplam: 0 Puan: 0]
Etiketler

İlgili Makaleler

Bir cevap yazın

Başa dön tuşu