PHP tarih saat işlemleri için kullanılabilecek birçok hazır PHP zaman fonksiyonları bulunmakta. Bu zaman fonksiyonları ile çoğu tarih işlemi kolaylıkla yapılabilmekte. Bu yazıda bu fonksiyonların neler olduğu ve nasıl kullanıldığını ayrıntılı bir şekilde göreceksiniz.
Ayrıca bu içerikle alakalı olarak PHP türkçe tarih konulu yazıma göz atabilirsiniz. PHP zaman fonksiyonlarına giriş yapalım.
date_default_timezone_set()
fonksiyonu
PHP tarih ve zaman işlemleri yaparken ayarlamaların tam ve hatasız olması için ilk olarak bulunduğumuz ülkenin zaman dilimini sunucuya bildirmemiz gerekir. Türkiye için örnek olarak ‘Europe/Istanbul’ zaman dilimini seçilebilir. PHP zaman dilimleri için bu sayfaya göz atabilirsiniz. PHP date_default_timezone_set fonksiyonu ile belirli ülkenin zaman dilimini seçebilir veya sunucuda tanımlı zaman dilimini öğrenebilirsiniz.
date_default_timezone_set('Europe/Istanbul'); //zaman dilimini istanbul olarak ayarla
echo date_default_timezone_get(); //seçili zaman dilimini yazdır
//örnek çıktı: Europe/Istanbul
time() fonksiyonu
PHP time fonksiyonu kullanımı ile şu an ki zamanı unix zaman damgası cinsinden saniye değeri olarak öğrenebiliriz.
echo time(); // çıktı: 1518870488
Unix zaman damgası nedir? 1 Ocak 1970 00:00:00 tarihinden bu yana geçen zaman diliminin saniye cinsinden değeridir. Unix time olarak da adlandırılan bu sonuç PHP tarih saat işlemlerinde sıklıkla kullanılmakta. Elde edilen unix zaman damgası değerini PHP zaman fonksiyonları ile istenilen formatlara dönüştürülerek birçok zaman işlemleri yapılmaktadır.
date() fonksiyonu
PHP tarih saat fonksiyonları içerisinde en çok kullanılanlarından date fonksiyonu, ilk parametresinde belirtilen tarih formatına ikinci parametresinde belirtilen sayısal değerdeki zaman damgasını dönüştürür. İkinci parametresine herhangi bir değer girilmez ve tek parametre ile kullanılır ise o anki zaman değerine göre tarih biçimlendirme işlemi yapılır. PHP date fonksiyonu kullanımı aşağıdaki gibidir.
$tarih = date('d-m-Y H:i:s',time());
echo $tarih; //çıktı: 17-02-2018 16:28:53
Yukarıdaki örnekte time fonksiyonu ile o anki zaman değeri date fonksiyonu ile gün-ay-yıl saat-dakika-saniye biçimine dönüştürülerek tarih değişkenine aktarılıyor ve ekrana yazdırılıyor.
Aşağıdaki fonksiyonda ise zaman damgasının girildiği ikinci parametre kullanılmıyor ve o anki zaman değeri varsayılan olarak biçimlendirilip direkt ekrana yazdırılıyor.
echo date('Y/m/d H/i/s'); //çıktı: 2018/02/17 16:28:53
Zaman biçimlendirme karakterlerinin yerlerinin değişmesi ve karakterlerin arasındaki işaretlere göre date fonksiyonu ile PHP tarih formatını değiştirme işlemi gerçekleştiriliyor.
Aşağıdaki tabloda date fonksiyonunda kullanılabilecek zaman biçimlendirme karakterleri listelenmektedir. PHP tarih format karakterleri hakkında daha fazla ayrıntı için buraya tıklayın.
Karakter | Açıklama | Örnek |
s | Sıfırlı şekilde iki haneli saniye değeri | 07 |
i | İki haneli dakika değeri | 05 |
H | İki haneli 24 saat biçiminde saat değeri | 00 ile 23 arası |
d | İki haneli gün değeri | 01 ile 31 arası |
m | İki haneli ay değeri | 01 ile 12 arası |
Y | 4 haneli yıl değeri | 2017 |
j | Tek haneli gün değeri | 4 |
n | Tek haneli ay değeri | 1 ile 12 arası |
y | İki haneli yıl değeri | 18,96 |
l (küçük L harfi) | Metinsel şekilde ingilizce haftanın günleri | Saturday |
F | Metinsel şekilde ingilizce ay isimleri | February |
z | Sayısal şekilde yılın günleri | 0 ile 365 arası |
mktime() fonksiyonu
Girilen zaman değerlerine göre unix zaman damgası biçiminde zaman değeri oluşturmak için kullanılır. Parametre kullanılmadan mktime fonksiyonu kullanılır ise time fonksiyonu ile aynı işlevi görür. PHP mktime fonksiyonu kullanımı aşağıdaki gibidir.
Mktime içerisine girilen parametrelerin düzeni: Saat, dakika, saniye, ay, gün, yıl, yaz saati
echo mktime(); //örnek çıktı: 1518888869
echo time(); //örnek çıktı: 1518888869
$saat = 11;
$dakika = 15;
$saniye = 30;
$ay = 10;
$gun = 17;
$yil = 1996;
echo mktime($saat,$dakika,$saniye,$ay,$gun,$yil); //çıktı: 845550930
7 parametre varsayılan olarak ‘-1’ değeri tanımlıdır yani yaz saati uygulamasının olup olmadığının bilinmediği durumda kullanılır. Yaz saati uygulamasının olduğu durumda ‘1’, olmadığı durumda ise ‘0’ değeri girilir.
strtotime() fonksiyonu
PHP strtotime fonksiyonu içerisine girilen metinsel zaman ifadelerini unix zaman damgasına çevirme işlemini gerçekleştirir. 2 parametre ile kullanılır. İlk parametre zaman değeri ile işlemlerin yapılmasını sağlayan metinsel ifadeler, ikinci parametre ise zaman değeri. İkinci parametre kullanılması zorunlu değildir ve varsayılan olarak time() fonksiyonu ile anlık zaman değerini kullanır. PHP tarih saat fonksiyonlarından birisi olan strtotime fonksiyonu kullanımı aşağıdaki gibidir.
$bugun = strtotime('17.02.2018 22:21');
echo $bugun.' - '.date('d-m-Y H:i:s',$bugun).'
'; //örnek çıktı: 1518906060 - 17-02-2018 22:21:00
Yukarıdaki örnekte, strtotime fonksiyonunun içerisine string türde girilen zaman değerini Unix zaman damgasına çevirip, date fonksiyonu ile tekrar anlaşılabilecek hale dönüştürüp ekrana yazdırma işlemi gerçekleştiriliyor.
Aşağıdaki şekilde de kullanılabilir.
echo strtotime('2018-02-17').'
'; //çıktı: 1518825600
echo strtotime('2018-02-17 00:00:00').'
'; //çıktı: 1518825600
echo strtotime('12:02:59').'
'; //çıktı: 1518868979
echo strtotime('17.02.2018 12:02:59').'
'; //çıktı: 1518868979
Not: Parametre olarak girilen
metinsel ifade de gün-ay-yıl tam olarak zaman belirtildiği zaman
ikinci parametrede girilen zaman değeri bir anlam ifade etmez.
Aşağıdaki örnekte ise strtotime fonksiyonlarından çıkan unix zaman damgalı saniye değerini date fonksiyonu ile hangi güne ait olduğunu anlayabilecek hale çeviriyoruz ve ekrana yazdırıyoruz. Böylelikle aralarındaki farkı daha net görebiliriz.
$tarih1 = strtotime('+1 day');
echo $tarih1.' - '.date('d-m-Y H:i:s',$tarih1).'
'; //örnek çıktı: 1518981804 - 18-02-2018 19:23:24
$tarih2 = strtotime('+1 day',time());
echo $tarih2.' - '.date('d-m-Y H:i:s',$tarih2).'
'; //örnek çıktı: 1518981804 - 18-02-2018 19:23:24
$tarih3 = strtotime('+1 day',time()+(60*60*24));
echo $tarih3.' - '.date('d-m-Y H:i:s',$tarih3).'
'; //örnek çıktı: 1519068204 - 19-02-2018 19:23:24
Strtotime fonksiyonlarının ikinci
parametresine girilen zaman değerine 1 gün eklenmiş oluyor. İlk
fonksiyon ile ikinci fonksiyonun ikinci parametresi bugünün
değerini verdiği için bu iki fonksiyon da yarının değerini
döndürmüş olacak. Üçüncü fonksiyonun ikinci parametresine 1
gündeki saniye sayısı da eklendiği için yarının değil öteki
günün değerini döndürmüş olacak.
Strtotime fonksiyonu ile PHP tarihe gün ekleme, hafta ekleme, ay ekleme ve yıl ekleme gibi başka örnekleri aşağıda görebilirsiniz.
echo date('d-m-Y H:i:s').'
';//çıktı (şu anki zaman): 17-02-2018 20:01:10
$zaman1 = strtotime('-1 hour +2 day'); //2 gün ekle ve 1 saat çıkart
echo date('d-m-Y H:i:s',$zaman1).'
'; //çıktı: 19-02-2018 19:01:10
$zaman2 = strtotime('-2 week'); //2 hafta önceki zaman
echo date('d-m-Y H:i:s',$zaman2).'
'; //çıktı: 03-02-2018 20:01:10
$zaman3 = strtotime('+1 seconds +1 minutes +1 hours +1 day +1 weeks +1 mouths +1 years'); //1 saniye, 1 dakika, 1 saat, 1 gün, 1 hafta, 1 ay, 1 yıl ekle
echo date('d-m-Y H:i:s',$zaman3).'
'; //çıktı: 25-02-2019 20:02:11
$zaman4 = strtotime('next friday');
echo date('d-m-Y H:i:s',$zaman4).'
'; //çıktı: 23-02-2018 00:00:00
$zaman5 = strtotime('last friday');
echo date('d-m-Y H:i:s',$zaman5).'
'; //çıktı: 16-02-2018 00:00:00
Strtotime fonksiyonu hakkında ayrıntılı daha fazla bilgi almak için bu sayfaya tıklayabilirsiniz.
microtime() fonksiyonu
Microtime fonksiyonu içerisine parametre olarak girilen unix zaman damgasını mikrosaniyeye çevirip geri döndürür. PHP microtime fonksiyonu kullanımı aşağıdaki gibidir.
echo microtime(time()).'
'; //çıktı: 1518898878.8966
getdate() fonksiyonu
Getdate fonksiyonu içerisine parametre olarak girilen unix zaman damgalı değere karşılık olarak tarih ve zaman bilgilerini dizi olarak döndürür. Parametre olarak değer girilmeden düz kullanılır ise varsayılan olarak fonksiyonun çalıştığı zamanın unix zaman değerini kullanır. Getdate fonksiyonu ile dizi olarak döndürülen anahtarların listesi ve açıklamaları aşağıdaki gibidir.
Anahtar | Açıklama | Örnek |
seconds | Saniye | 0 ile 59 arası |
minutes | Dakika | 0 ile 59 arası |
hours | Saat | 0 ile 23 arası |
mday | Ayın günleri | 1 ile 31 arası |
wday | Haftanın günleri | 0=Pazar ile 6=cumartesi arası |
mon | Ay | 1 ile 12 arası |
year | Yıl | 2017, 1996 |
yday | Yılın günleri | 0 ile 365 arası |
weekday | Metinsel haftanın günleri | Friday, Thursday |
month | Metinsel ayın günleri | February, April |
0 | Fonksiyon içerisinde işlenen Unix zaman damgası değeri | -2147483648 ile 2147483647 arası |
PHP getdate fonksiyonu kullanımı ise aşağıdaki gibidir.
print_r(getdate(time()));
/*
--çıktı--
Array (
[seconds] => 11
[minutes] => 15
[hours] => 9
[mday] => 18
[wday] => 0
[mon] => 2
[year] => 2018
[yday] => 48
[weekday] => Sunday
[month] => February
[0] => 1518945311
)
*/
Yukarıdaki örnekte, getdate fonksiyonuna parametre girilmez ise yine aynı sonucu verecekti. Çünkü varsayılan olarak time fonksiyonu çalıştırılmakta.
checkdate() fonksiyonu
Checkdate fonksiyonu ile PHP tarih kontrolü yapılabilmekte. İçerisine parametre olarak girilen ay, gün, yıl değerlerini miladi takvim üzerinden doğrulama işlemini yerine getirir. Geçerli bir tarih girilmesi sonucunda fonksiyon true değeri döndürür, aksi halde false değeri döner. PHP checkdate fonksiyonu kullanımı aşağıdaki gibidir.
$gun = 18;
$ay = 2;
$yil=2018;
$sonuc = checkdate($ay, $gun, $yil);
if ($sonuc){
echo 'Tarih doğrulama: Geçerli';
}else{
echo 'Tarih doğrulama: Geçersiz';
}
//çıktı: Tarih doğrulama: Geçerli
Örnek vermek gerekirse, miladi takvim de 2018 yılında şubat 28 çekiyor. Yukarıdaki örnekte ‘gun’ değişkenine 29 değerini belirtirsek bu geçersiz bir tarih anlamına gelir ve fonksiyondan ‘false’ değeri döner.