PHP Tarih - Saat İşlemleri
PHP’de tarih-zaman bilgisini almak için getdate(), biçimlendirmek için date() / DateTime kullanılır. Dil (Türkçe ay-gün adları) için en doğru yöntem IntlDateFormatter’dır.
- Timezone ayarlamazsan saat kaymış görünebilir:
date_default_timezone_set('Europe/Istanbul') - date() dili Türkçe olmaz;
date('F')genelde “January” döner. Türkçe içinIntlDateFormatterkullan. - Kısa tag (
<?) bazı sunucularda kapalı olur. En güvenlisi<?php.
Hızlı Örnekler
En çok kullanılan birkaç tarih-saat formatı:
<?php
date_default_timezone_set('Europe/Istanbul');
echo "Log: " . date('Y-m-d H:i:s') . PHP_EOL; // 2026-01-04 16:30:00
echo "TR: " . date('d.m.Y H:i') . PHP_EOL; // 04.01.2026 16:30
echo "ISO: " . date('c') . PHP_EOL; // 2026-01-04T16:30:00+03:00
echo "RFC: " . date('r') . PHP_EOL; // Sun, 04 Jan 2026 16:30:00 +0300
?>
date() Biçimlendirme Parametreleri
Aşağıdaki tablo sık kullanılan parametreleri özetler. (Not: F, l gibi ay/gün adları çoğu sunucuda İngilizce döner.)
| Parametre | Açıklama | Örnek |
|---|---|---|
a | am/pm (küçük harf) | pm |
A | AM/PM (büyük harf) | PM |
d | Gün (2 hane, başa 0): 01-31 | 04 |
j | Gün (0’sız): 1-31 | 4 |
D | Gün kısa adı (genelde İngilizce): Mon, Tue… | Sun |
l | (küçük L) Gün uzun adı (genelde İngilizce): Sunday… | Sunday |
m | Ay (2 hane): 01-12 | 01 |
n | Ay (0’sız): 1-12 | 1 |
M | Ay kısa adı (genelde İngilizce): Jan, Feb… | Jan |
F | Ay uzun adı (genelde İngilizce): January… | January |
Y | Yıl (4 hane) | 2026 |
y | Yıl (2 hane) | 26 |
H | Saat (24’lük, 2 hane): 00-23 | 16 |
G | Saat (24’lük, 0’sız): 0-23 | 16 |
h | Saat (12’lik, 2 hane): 01-12 | 04 |
g | Saat (12’lik, 0’sız): 1-12 | 4 |
i | Dakika: 00-59 | 05 |
s | Saniye: 00-59 | 09 |
t | Ayın gün sayısı: 28-31 | 31 |
L | Artık yıl mı? (1/0) | 0 |
z | Yılın gün sayısı: 0-365 | 3 |
w | Haftanın günü: 0=Pazar … 6=Cumartesi | 0 |
N | ISO haftanın günü: 1=Pazartesi … 7=Pazar | 7 |
W | ISO hafta numarası | 01 |
o | ISO yıl (W ile birlikte) | 2026 |
U | Unix timestamp (saniye) | 1776330385 |
c | ISO 8601 | 2026-04-16T12:06:25+03:00 |
r | RFC 2822 | Thu, 16 Apr 2026 12:06:25 +0300 |
e | Timezone adı | Europe/Istanbul |
P | UTC offset (+03:00) | +03:00 |
Örnek: date() ile biçimlendirme
Senin örnekleri koruduk, yanına pratik bir format daha ekledik:
<?php
date_default_timezone_set('Europe/Istanbul');
echo "1) " . date("l dS of F Y h:i:s A") . "<br>";
echo "2) " . date("l, d F Y g:i:s") . "<br>";
echo "3) " . date("d.m.Y H:i:s") . "<br>"; // TR görünüm (ay/gün adı yok)
?>
l ve F değerleri çoğu sunucuda İngilizce gelir.
Türkçe ay/gün adı istiyorsan aşağıdaki “Türkçe çıktı” bölümünü kullan.
Tarih bilgisini dizi olarak almak: getdate()
getdate() mevcut zamanı (veya verdiğin timestamp’i) dizi şeklinde döndürür.
<?php
$bilgi = getdate(); // şimdi
echo $bilgi['year'] . "-" . $bilgi['mon'] . "-" . $bilgi['mday'] . "<br>";
echo $bilgi['hours'] . ":" . $bilgi['minutes'] . ":" . $bilgi['seconds'] . "<br>";
echo "Haftanın günü (0=Pazar): " . $bilgi['wday'];
?>
Timestamp ve dönüşümler: time() / strtotime()
time() şimdi’nin Unix timestamp’ini verir.
strtotime() ise metinden tarih üretir (ör: +7 days, next monday).
<?php
$simdi = time();
echo "Timestamp: " . $simdi . "<br>";
echo "Şimdi: " . date('Y-m-d H:i:s', $simdi) . "<br>";
echo "+7 gün: " . date('Y-m-d', strtotime('+7 days')) . "<br>";
echo "Gelecek Pazartesi: " . date('Y-m-d', strtotime('next monday')) . "<br>";
echo "Dün: " . date('Y-m-d H:i', strtotime('yesterday')) . "<br>";
?>
strtotime() yorumlamayı timezone’a göre yapar. Bu yüzden timezone ayarı (Europe/Istanbul) önemlidir.
Modern kullanım: DateTime ve DateTimeImmutable
Tarih üzerinde işlem yapacaksan (gün ekle, ay çıkar, karşılaştır, timezone çevir) en esnek yöntem budur.
<?php
$tz = new DateTimeZone('Europe/Istanbul');
$dt = new DateTime('now', $tz);
echo "Şimdi: " . $dt->format('Y-m-d H:i:s') . "<br>";
$dt->modify('+10 days');
echo "+10 gün: " . $dt->format('Y-m-d H:i:s') . "<br>";
// Immutable örneği (orijinal değişmez)
$im = new DateTimeImmutable('2026-01-04 10:00:00', $tz);
$im2 = $im->modify('+3 hours');
echo "Immutable ilk: " . $im->format('Y-m-d H:i:s') . "<br>";
echo "Immutable yeni: " . $im2->format('Y-m-d H:i:s') . "<br>";
?>
Türkçe gün/ay adı ile çıktı: IntlDateFormatter
Ay/gün adlarını gerçekten Türkçe basmak istiyorsan en doğru yöntem budur. (Sunucuda intl eklentisi aktif olmalı.)
<?php
date_default_timezone_set('Europe/Istanbul');
$dt = new DateTime('now', new DateTimeZone('Europe/Istanbul'));
if (class_exists('IntlDateFormatter')) {
$fmt = new IntlDateFormatter(
'tr_TR',
IntlDateFormatter::FULL,
IntlDateFormatter::MEDIUM,
'Europe/Istanbul'
);
echo $fmt->format($dt);
} else {
echo "IntlDateFormatter yok. Sunucuda intl eklentisini etkinleştirin.";
}
?>
Bonus: İki tarih arasındaki fark (DateInterval)
İki tarih arasındaki gün/saat farkını hesaplamak için:
<?php
$tz = new DateTimeZone('Europe/Istanbul');
$a = new DateTime('2026-01-01 10:00:00', $tz);
$b = new DateTime('2026-01-04 16:30:00', $tz);
$diff = $a->diff($b);
echo "Fark: " . $diff->days . " gün, " . $diff->h . " saat, " . $diff->i . " dk";
?>