Yaptığımız uygulamaların hemen hemen hepsinde zamanla ilgili işlemler yaparız. Bu makalede PHP de tarih ve saat işlemlerinin nasıl yapıldığını göreceğiz.
Unix time
PHP tarih ve saat işlemlerinde unix zaman damgasını (unix timestamp) kullanır. Unix formatı 1 Ocak 1970 00:00:00 tarihinden itibaren geçen saniye sayısını tutan integer(tamsayı) bir değerdir.
time()
Şu anki zaman bilgisini unixtime formatında döndüren fonksiyondur. time() fonksiyonu parametre almaz.
<?php
$suan_unix=time();
echo 'Şuan: '.$suan_unix;
// ÇIKTI
// Şuan: 1479901380
?>
Örnekte makaleyi yazdığım tarihte aldığım sonucu görüyoruz.
Aldığımız sonuç şu ana kadar geçen saniye sayısını gösteren bir tamsayı olduğu için biz bu saniye değerine ekleme çıkarma yaparak istediğimiz bir zamanın zaman damgasını bulabiliriz. Örneğin bir gün sonranın, 2 gün öncenin zaman damgalarını bulabiliriz.
Örnek: 3 gün öncenin zaman damgasını bulalım. Bunun için (3*24*60*60) formülüyle 3 günde kaç saniye olduğunu buluyoruz ve bulduğumuz değeri şu anın değerinden çıkarıyoruz.
<?php
$suan=time();
$uc_gun_once=$suan-(3*24*60*60);
echo 'Şuan: '.$suan.'<br>';
echo '3 gün önce: '.$uc_gun_once;
// ÇIKTI
// Şuan: 1479894837
// 3 gün önce: 1479635637
?>
date(format, timestamp)
Unix formatındaki bir tarihi istenilen bir formatta göstermeye yarar.
Parametreler
- format: Gerekli bir parametredir. Ekranda tarihin nasıl gösterileceğini belirlediğimiz parametredir. Aşağıda ki tabloda bu formatta kullanılan parametreleri görüyoruz.
- timestamp: Opsiyonel bir parametredir. Unix formatında tarihi yazarız. Eğer boş bırakılırsa default olarak şimdiki zaman değeriyle çalışır.
Formatta kullanılan parametreler
Format | İşlevi | Örnek Sonuç |
Gün | ||
d | 0 dolgulu gün gösterimi | 05, 27... |
j | 0 dolgusuz gün gösterimi | 3, 18... |
D | Gün isimlerinin 3 haneli metinsel gösterimi | Mon, Sun... |
l | Günlerin tam isimleri (küçük L harfi) | Monday, Sunday |
w | Günlerin sayısal gösterimi | 1=pazartesi, 2=salı,...., 7=pazar |
N | Günlerin sayısal gösterimi | 0=pazar, 1=pazartesi, ..., 6=cumartesi |
z | yılın günleri (0 dan başlar) | 0,1. 2,...,365 |
Hafta | ||
W | yılın hafta numarası (hafta başlangıcı pazartesidir) | yılın 25. haftası gibi |
Ay | ||
F | ayın tam adı | January, February,... |
M | ay adının 3 karakterli gösterimi | Jan, Feb,... |
m | 0 dolgulu ay gösterimi | 01, 02, ....., 12 |
n | 0 dolgusuz ay gösterimi | 1, 2 , ...., 12 |
t | belirtilen ayın toplam gün sayısı | 28, ..., 31 |
Yıl | ||
Y | yılın 4 haneli gösterimi | 2000, 2016 ... |
y | yılın 2 haneli gösterimi | 00, 16 ... |
L | Artık yıl ise 1 değilse 0 döndüren boolean değişken | 1 veya 0 |
Saat | ||
A | Büyük harflerle öğleden önce veya sonra bilgisi | AM, PM |
a | Küçük harflerle öğleden önce veya sonra bilgisi | am, pm |
G | 24 saatlik 0 dolgusuz saat gösterimi | 0, 1, ..., 23 |
g | 12 saatlik 0 dolgusuz saat gösterimi | 1, 2, ..., 12 |
H | 24 saatlik 0 dolgulu saat gösterimi | 00, 01, ..., 23 |
h | 12 saatlik 0 dolgulu saat gösterimi | 01, 02, ..., 12 |
i | 0 dolgulu dakika gösterimi | 00, ..., 59 |
s | 0 dolgulu saniye gösterimi | 00, ..., 59 |
Sık kullanılan biçimler bu tabloda belirtilmiştir. Daha fazla bilgiyi şuradaki tablodan bulabilirsiniz.
Örnek:
<?php
echo date('d/m/Y').'<br>';
echo date('d F Y l',time()+3*24*60*60).'<br>';
echo date('d.m.y H:i:s').'<br>';
// ÇIKTI
// 23/11/2016
// 26 November 2016 Saturday
// 26.11.2016 14:51:47
?>
mktime(saat, dakika, saniye, ay, gün, yıl)
mktime fonksiyonu parametrelerle belirttiğimiz zamanı unix zaman damgasına çevirir. Parametrelerin sıralaması önemlidir.
Örnek: 29.05.2016 16:39:02 tarihinin mktime fonksiyonu ile unix zaman damgasını buluyoruz.
<?php
echo mktime(16, 39, 02, 05, 29, 2016);
// 1464529142
?>
strtotime()
İnsanın okuyabileceği formattaki bir stringi unix zaman damgasına çevirir.
Örnek:
<?php
echo(strtotime("now") . "<br>");
echo(strtotime("3 October 2005") . "<br>");
echo(strtotime("06.06.2015") . "<br>");
echo(strtotime("+5 hours") . "<br>");
echo(strtotime("+1 week") . "<br>");
echo(strtotime("next Monday") . "<br>");
echo(strtotime("last Sunday").'<br>');
echo(strtotime("+1 month 1 week 3 days 7 hours,- 5 seconds") . "<br>");
echo(strtotime("+1 month 1 week 3 days 7 hours 5 seconds") . "<br>");
// 1479905915
// 1128286800
// 1433538000
// 1479923915
// 1480510715
// 1480280400
// 1479589200
// 1483387110
// 1483387120
?>
yukarıda now ile şu an ki zaman damgasını yazıyoruz. örneğin +5 hours yazarak şu anki zaman damgasından 5 saat sonrasının zaman damgasını elde ederiz.