İçeriğe atla
FerdiGidenby FerdiSoftBETA v2.4
Web Geliştirme

PHP'de Tarih ve Saat Dilimi: DateTimeImmutable ile Hatasız Hesap

PHP'de Tarih ve Saat Dilimi: DateTimeImmutable ile Hatasız Hesap hakkında dağınık bilgiler yerine derli toplu bir kaynak arıyorsanız doğru yerdesiniz. Bu yazı 5 temel noktayı ve bunları bir araya getiren PHP örneğini sade bir dille açıklıyor.

Ferdi GidenFerdi Giden 2 dk okuma 1
PHP'de Tarih ve Saat Dilimi: DateTimeImmutable ile Hatasız Hesap
İçindekiler
  1. Konuya genel bakış
  2. Öne çıkan noktalar
  3. PHP ile uygulama
  4. Neden önemli? Kazanımlar
  5. Özetle

PHP'de Tarih ve Saat Dilimi: DateTimeImmutable ile Hatasız Hesap hakkında dağınık bilgiler yerine derli toplu bir kaynak arıyorsanız doğru yerdesiniz. Bu yazı 5 temel noktayı ve bunları bir araya getiren PHP örneğini sade bir dille açıklıyor.

Konuya genel bakış

Sunucu saati UTC, veritabanı saati başka, kullanıcı İstanbul'da: tarih hatalarının çoğu saat dilimlerinin karışmasından doğar. DateTime nesnesinin yerinde değişmesi de "bir tarihe 30 gün ekledim, başka bir değişkenim de değişti" türünden hatalara yol açar. DateTimeImmutable ve açık saat dilimi kullanımı bu iki sorunu birlikte çözer.

Öne çıkan noktalar

  • Immutable tercih edin: DateTimeImmutable üzerindeki her işlem yeni bir nesne döndürür; orijinal tarih yanlışlıkla değişmez.
  • Saklarken UTC: Veritabanında UTC saklayıp yalnız gösterirken kullanıcının saat dilimine çevirmek, yaz saati ve sunucu taşıma sorunlarını önler.
  • Varsayılan dilimi belirleyin: date_default_timezone_set ya da php.ini içindeki date.timezone ayarı yapılmazsa sunucuya göre farklı sonuç alırsınız.
  • Ay sonu tuzağı: 31 Ocak tarihine "+1 month" eklemek Mart başına taşar; ay sonu hesabında "last day of next month" ifadesini kullanın.
  • Fark hesabı: diff() ile alınan DateInterval nesnesinin days özelliği iki tarih arasındaki toplam gün sayısını verir.

PHP ile uygulama

Aşağıdaki PHP örneği, yukarıdaki noktaların gerçek bir kodda nasıl bir araya geldiğini gösteriyor:

date_default_timezone_set('Europe/Istanbul');

$simdi = new DateTimeImmutable();                              // İstanbul saati
$bitis = $simdi->modify('+30 days')->setTime(23, 59, 59);
echo $simdi->format('d.m.Y H:i');                              // $simdi değişmedi

// Veritabanına UTC olarak yaz
$utc = $bitis->setTimezone(new DateTimeZone('UTC'))->format('Y-m-d H:i:s');

// Veritabanından gelen UTC değerini kullanıcıya göster
$kayit = new DateTimeImmutable('2026-11-15 09:30:00', new DateTimeZone('UTC'));
echo $kayit->setTimezone(new DateTimeZone('Europe/Istanbul'))->format('d.m.Y H:i');   // 15.11.2026 12:30

// İki tarih arasındaki fark
echo $simdi->diff($bitis)->days . ' gün kaldı';

Kodu doğrudan kopyalamak yerine her satırın ne yaptığını anlayarak uyarlamanız, ileride çıkacak hataları çözmeyi kolaylaştırır.

Canlı sunucuda display_errors kapalı olmalı; hataları kullanıcıya göstermek yerine günlüğe yazdırın.

Neden önemli? Kazanımlar

Bu yaklaşımı benimsediğinizde elde edeceğiniz başlıca faydalar:

  • Kullanıcılar dünyanın neresinde olursa olsun doğru saati görür
  • Yan etkili tarih değişikliklerinden doğan hatalar biter
  • Sunucu taşındığında tarih verisi bozulmaz

Özetle

Bu yazı boyunca PHP'de Tarih ve Saat Dilimi: DateTimeImmutable ile Hatasız Hesap konusunun temel taşlarını ve uygulamada dikkat edilmesi gerekenleri gördük. Özellikle Immutable tercih edin ve Fark hesabı başlıklarını uygulamaya geçirmek iyi bir başlangıç olur.

İlgili içerikler:

Daha fazla uygulamalı içerik için Akademi derslerine ve blog yazılarına göz atabilirsiniz.

Paylaş:
Ferdi Giden

Yazar

Ferdi Giden @admin
Sistem YöneticisiDoğrulanmış GeliştiriciBeta KullanıcıFerdiSoft KatılımcısıDoğrulanmış ProfilGüvenlik Bilinci

PHP, MySQL ve Tailwind ile kurumsal yazılımlar geliştiriyor; FerdiSoft çatısı altında ERP, WMS ve SaaS çözümleri üretiyor.

Yorumlar 0

Yorum yapmak ve tartışmaya katılmak için giriş yapın. Rozetleriniz yorumlarınızda görünür.

Henüz yorum yok. İlk yorumu siz yazın!

İlgili yazılar

Tüm yazılar
Ücretsiz Teklif Al