Arif

WFN Üye
Konular
638
Mesajlar
638
Çözüm
0
Ticaret Puanı
0
Üyelik
23 Gün
Konum
Bilecik
Web Sitesi
Var
Alanı
SEO Uzmanı
1/1
Konu sahibi
PHP’de tarih ve saati biçimlendirmek için en pratik yöntem DateTimeImmutable nesnesinin format() metodunu kullanmaktır. Elinizde Unix zaman damgası varsa date() de kullanılabilir; ancak saat dilimini açıkça yönetmeniz gereken uygulamalarda DateTimeImmutable ve DateTimeZone birlikte daha güvenlidir. Biçimlendirme işlemi tarihi değiştirmez, yalnızca ekrana veya çıktıya hangi sırada ve biçimde yazılacağını belirler.

DateTimeImmutable ile tarih ve saat biçimlendirme​


Önce tarih nesnesini oluşturun, ardından istediğiniz biçimi format() içine yazın:

PHP:
<?php

$tarih = new DateTimeImmutable('2026-10-25 14:30:45', new DateTimeZone('Europe/Istanbul'));

echo $tarih->format('d.m.Y H:i:s');

Bu örneğin çıktısı şöyledir:

Kod:
25.10.2026 14:30:45

Buradaki d iki haneli gün, m iki haneli ay, Y dört haneli yıl, H 24 saatlik saat, i dakika ve s saniye anlamına gelir. Biçim karakterleri büyük-küçük harfe duyarlıdır. Örneğin m ayı, M ise İngilizce kısa ay adını temsil eder.

Sık kullanılan biçim karakterleri​


Aşağıdaki karakterler, günlük PHP uygulamalarında en çok kullanılan tarih ve saat parçalarını verir:
BiçimAnlamıÖrnek çıktı
dİki haneli gün05
jBaştaki sıfır olmadan gün5
mİki haneli ay10
nBaştaki sıfır olmadan ay10
YDört haneli yıl2026
yİki haneli yıl26
H24 saatlik saat14
h12 saatlik saat02
iDakika30
sSaniye45
aKüçük harfle öğleden önce/sonra göstergesipm
ABüyük harfle öğleden önce/sonra göstergesiPM
Örneğin 12 saatlik gösterim ve öğleden önce/sonra bilgisi için şu biçimi kullanabilirsiniz:

PHP:
<?php

$tarih = new DateTimeImmutable('2026-10-25 14:30:45');

echo $tarih->format('d/m/Y h:i A');

Çıktı 25/10/2026 02:30 PM olur. Buradaki h yalnızca saati 12 saatlik biçime çevirir; A ise bunun öğleden sonra olduğunu gösterir. H kullanırsanız aynı saat 14:30 olarak yazılır.

Metin eklemek ve özel karakterleri göstermek​


Format dizgesindeki harflerin çoğu özel anlam taşır. Sabit bir metin eklemek istediğinizde metni tek tırnak içine alabilir veya özel karakterleri ters eğik çizgiyle kaçırabilirsiniz:

PHP:
<?php

$tarih = new DateTimeImmutable('2026-10-25 14:30:45');

echo $tarih->format('d.m.Y 	arihinde saat H:i');

Beklenen çıktı şöyledir:

Kod:
25.10.2026 tarihinde saat 14:30

Burada \t içindeki t harfi tarih biçimlendirme karakteri olarak yorumlanmaz ve normal metin olarak yazdırılır. Birden fazla sabit metin kullanacaksanız biçim dizgesini dikkatli hazırlayın; aksi hâlde harfler tarih parçalarına dönüştürülebilir.

Türkçe ay ve gün adlarını göstermek​


format() içindeki l, D, F ve M karakterleri gün veya ay adlarını yerleşik İngilizce adlarla üretebilir. Bu değerleri Türkçe göstermek için yalnızca format() kullanmak yeterli değildir. Uygulamanızın yerelleştirme yaklaşımına göre çeviri tablosu kullanabilir veya IntlDateFormatter sınıfından yararlanabilirsiniz.

PHP:
<?php

$tarih = new DateTimeImmutable('2026-10-25 14:30:45', new DateTimeZone('Europe/Istanbul'));

$formatter = new IntlDateFormatter(
    'tr_TR',
    IntlDateFormatter::LONG,
    IntlDateFormatter::SHORT,
    'Europe/Istanbul'
);

echo $formatter->format($tarih);

Bu yöntemin çalışması için PHP kurulumunda intl uzantısının etkin olması gerekir. format() sayısal biçimler için yeterliyken, IntlDateFormatter dil ve bölgeye göre ay, gün ve saat gösterimini yerelleştirmek için uygundur. Sunucuda intl yoksa kod çalışırken sınıf bulunamadığına dair hata alabilirsiniz; bu durumda uzantıyı etkinleştirmek veya uygulama içinde açık bir Türkçe karşılık tablosu kullanmak gerekir.

Unix zaman damgasını biçimlendirme​


Veri tabanından veya başka bir sistemden Unix zaman damgası geliyorsa bu sayı, 1 Ocak 1970 UTC’den itibaren geçen saniyeyi ifade eder. Sayıyı doğrudan date() ile biçimlendirebilirsiniz:

PHP:
<?php

$zamanDamgasi = 1792938645;

echo date('d.m.Y H:i:s', $zamanDamgasi);

Ancak date() çıktıyı PHP işleminin varsayılan saat dilimine göre üretir. Uygulamanın saat dilimi sunucudan sunucuya değişebileceği için saat dilimini açıkça belirtmek istiyorsanız zaman damgasını DateTimeImmutable::createFromFormat() ile nesneye dönüştürün:

PHP:
<?php

$zamanDamgasi = 1792938645;

$tarih = (new DateTimeImmutable('@' . $zamanDamgasi))
    ->setTimezone(new DateTimeZone('Europe/Istanbul'));

echo $tarih->format('d.m.Y H:i:s');

@ ile oluşturulan nesne başlangıçta UTC tabanlıdır. setTimezone() ise aynı anı İstanbul saat diliminde gösterir. Saat dilimini değiştirmek zaman damgasını değiştirmez; yalnızca ekranda görülen saat değişebilir.

Saat dilimini doğru seçme​


Tarih biçimlendirmede en sık karşılaşılan hata, doğru tarih bilgisinin yanlış saat diliminde gösterilmesidir. Kullanıcıya gösterilen değer için uygulamanın hedef saat dilimini açıkça seçin:

PHP:
<?php

$tarih = new DateTimeImmutable('now', new DateTimeZone('Europe/Istanbul'));

echo $tarih->format('d.m.Y H:i:s');

Veri tabanında tarih saklarken çoğu uygulama UTC kullanır, kullanıcıya gösterirken ise kullanıcının veya uygulamanın saat dilimine dönüştürür. Bu iki işlemi birbirine karıştırmayın: saklama biçimi ile gösterim biçimi aynı şey değildir. Ayrıca yalnızca ekranda görünen biçime bakarak verinin doğru saat diliminde saklandığı kanıtlanamaz; kaynak değer ve kullanılan saat dilimi de kontrol edilmelidir.

Veri tabanından gelen tarihi biçimlendirme​


Veri tabanından gelen değer 2026-10-25 14:30:45 gibi bir metinse, doğrudan metin üzerinde karakter değiştirmek yerine tarihi nesneye dönüştürüp biçimlendirin:

PHP:
<?php

$veritabaniTarihi = '2026-10-25 14:30:45';

$tarih = new DateTimeImmutable(
    $veritabaniTarihi,
    new DateTimeZone('Europe/Istanbul')
);

echo $tarih->format('d.m.Y H:i');

Çıktı 25.10.2026 14:30 olur. Veri tabanındaki değer UTC olarak tutuluyorsa nesneyi UTC saat dilimiyle oluşturup daha sonra kullanıcıya gösterilecek saat dilimine dönüştürün:

PHP:
<?php

$veritabaniTarihi = '2026-10-25 11:30:00';

$tarih = new DateTimeImmutable(
    $veritabaniTarihi,
    new DateTimeZone('UTC')
);

echo $tarih
    ->setTimezone(new DateTimeZone('Europe/Istanbul'))
    ->format('d.m.Y H:i');

Burada beklenen sonuç, UTC değerinin İstanbul saatine çevrilmiş gösterimidir. Saat beklenenden farklıysa önce veri tabanındaki değerin hangi saat diliminde saklandığını ve kodda hangi DateTimeZone değerinin kullanıldığını karşılaştırın. Yalnızca çıktı biçimini değiştirmek saat farkını düzeltmez.

Kullanıcı girdisini biçimlendirmeden önce doğrulama​


Kullanıcıdan gelen tarih metnini doğrudan new DateTimeImmutable() içine vermek bazı belirsiz biçimlerde beklenmeyen yorumlara yol açabilir. Beklenen biçimi sabitleyip createFromFormat() ve getLastErrors() ile doğrulayın:

PHP:
<?php

$girdi = '25.10.2026';

$tarih = DateTimeImmutable::createFromFormat(
    '!d.m.Y',
    $girdi,
    new DateTimeZone('Europe/Istanbul')
);

$hatalar = DateTimeImmutable::getLastErrors();

if ($tarih === false || ($hatalar !== false && ($hatalar['warning_count'] > 0 || $hatalar['error_count'] > 0))) {
    echo 'Geçersiz tarih';
} else {
    echo $tarih->format('Y-m-d');
}

Geçerli bir girdi için örneğin 2026-10-25 çıktısını alırsınız. ! işareti, belirtilmeyen saat parçalarının başlangıç değerleriyle kurulmasını sağlar. Girdi hatalıysa biçimlendirme yapıp geçerliymiş gibi kaydetmek yerine kullanıcıya beklenen biçimi bildirin. Tarihin biçiminin doğru olması, takvim açısından her iş kuralının geçerli olduğu anlamına gelmez; örneğin bir rezervasyon tarihi ayrıca geçmişte olamaz veya başlangıç tarihinden önce olamaz gibi kurallarla kontrol edilmelidir.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic