Menu

PHP date(): Tarih Alma, Biçimlendirme ve Hesaplama

date('Y-m-d') bugünün tarihini bir dizge olarak döndürür, date('Y-m-d', $timestamp) ise herhangi bir Unix zaman damgasını biçimlendirir. time(), mktime(), strtotime(), DateTimeImmutable, gün eklemeyi, iki tarih arasındaki farkı ve saat dilimlerini çalıştırabileceğiniz örneklerle öğrenin.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

date('Y-m-d') bugünün tarihini 2026-03-14 gibi bir dizge olarak döndürür. İlk argüman, her harfin tarihin bir parçasını temsil ettiği bir biçim dizgesidir (Y yıl, m ay, d gün, H:i:s saat); isteğe bağlı ikinci argüman ise şu an yerine biçimlendirilecek bir Unix zaman damgasıdır.

Çıktı Run düğmesine her bastığınızda değişir, çünkü UTC'deki güncel tarih ve saattir. Biçim dizgesinin her harfi ve aralarına düz metnin nasıl konulacağı PHP tarih biçimi sayfasında.

Zaman damgaları: time(), mktime() ve strtotime()

Unix zaman damgası 1 Ocak 1970 gece yarısı UTC'den beri geçen saniye sayısıdır. time() güncel olanı döndürür, mktime(hour, minute, second, month, day, year) parçalardan bir tane oluşturur ve strtotime() İngilizce yazılmış bir tarihi okur ('2026-03-14', '+1 week', 'next monday'). Herhangi bir zaman damgasını date() fonksiyonunun ikinci argümanı olarak verin. strtotime() fonksiyonunun ikinci argümanı göreli bir ifadenin saymaya başladığı andır; o olmadan şu andan sayar.

Çıktı:

1773480600
Sat, 14 Mar 2026 09:30
2027-01-01

tomorrow                    Sun 2026-03-15
+1 week                     Sat 2026-03-21
next monday                 Mon 2026-03-16
last day of this month      Tue 2026-03-31
first monday of next month  Mon 2026-04-06
bool(false)

mktime() içindeki taşma kullanışlıdır: bir ayın 0. günü önceki ayın son günüdür, bu yüzden mktime(0, 0, 0, 3, 0, 2026) 28 Şubat olur. Sonucu başka yere vermeden önce her zaman false ile karşılaştırın: date('Y-m-d', false) sessizce kimsenin kastetmediği 1970-01-01 tarihini yazdırır.

Bir tarihe gün ekleme

Yazdırmanın ötesindeki her şey için DateTimeImmutable kullanın. modify() metodu strtotime() ile aynı ifadeleri alır ve yeni bir tarih döndürür; add() ise P7D (7 günlük bir süre) veya PT90M (90 dakika) gibi bir DateInterval alır.

Çıktı:

2026-03-21
2026-03-13
2026-04-14
11:00
2025-03-14
2026-03-03
2026-02-28

31 Şubat yoktur, bu yüzden 31 Ocak üzerinde +1 month 3 Mart'a düşer. "Gelecek ayın sonu"nu kastettiğinizde bunu last day of next month ile söyleyin.

DateTime ile DateTimeImmutable

DateTime, modify(), add() veya setDate() çağırdığınızda kendini değiştirir ve aynı nesneyi döndürür. Bu, orijinal tarihi bir değişkende tutanları şaşırtır:

Çıktı:

2026-03-21
2026-03-21
bool(true)
2026-03-14
2026-03-21

Yeni kodda DateTimeImmutable tercih edin. İki sınıfın da aynı metotları vardır ve ikisi de DateTimeInterface arayüzünü uygular, bu yüzden bir fonksiyon ikisini de kabul edebilir.

İki tarih arasındaki fark

diff() bir DateInterval döndürür. Onun days özelliği iki tarih arasındaki toplam gün sayısıdır; y, m ve d ise aralığı yıllara, aylara ve günlere böler, bir yaş hesaplamasının tam olarak ihtiyaç duyduğu budur. Tarihleri değiştirin ve tekrar çalıştırın:

Çıktı:

Age: 35
Exactly: 35 years, 7 months, 22 days
Days alive: 13021
286 days to go
9 months and 11 days
-286 days

format() içinde %a toplam gün, %d ise yalnızca gün kısmıdır, bu yüzden "kaç gün kaldı" için kullanılacak olan %a olur. Bir fark almadan iki tarihi karşılaştırmak için sıradan operatörler tarih nesnelerinde çalışır: $today < $christmas true olur.

Saat dilimleri

date() ve new DateTimeImmutable() php.ini içindeki date.timezone ayarından gelen varsayılan saat dilimini kullanır (ayarlanmamışsa UTC). Onu bütün betik için date_default_timezone_set() ile ayarlayın ya da tek bir tarihe kendi DateTimeZone nesnesini verip setTimezone() ile dönüştürün:

Çıktı:

Asia/Tokyo        2026-03-14 18:30 JST +09:00
Europe/Berlin     2026-03-14 10:30 CET +01:00
America/New_York  2026-03-14 05:30 EDT -04:00
Asia/Tokyo
2026-03-14 18:30

Bir zaman damgası her yerde aynı sayıdır; saat dilimi yalnızca nasıl yazıldığını değiştirir. Tarihleri UTC'de saklayıp gösterirken dönüştürme tavsiyesinin olağan olmasının nedeni budur.

Bir web sayfasında takvim gösterme

Tarihler çoğu zaman HTML'e yazdırılır. Bu blok mevcut ayı bir takvim olarak çizer ve bugünü vurgular. Çalıştırın, sonra Previous veya Next düğmesine tıklayın: aynı betik bağlantıdan gelen $_GET['m'] değeriyle, örneğin ?m=2026-04, yeniden çalışır.

format('N') haftanın gününü 1 (Pazartesi) ile 7 (Pazar) arasında verir; ayın 1'inden önce kaç boş hücre geleceği budur. format('t') ise aydaki gün sayısını verir. '!Y-m' içindeki ! biçimin belirtmediği her alanı sıfırlar, bu yüzden gün 1, saat ise gece yarısı olur.

date() ile sık yapılan hatalar

date() fonksiyonunun ikinci argümanı bir tarih dizgesi değil bir zaman damgası olmalıdır. Bu satır:

<?php
echo date('d/m/Y', '2026-03-14');

betiği bir TypeError ile durdurur:

PHP Fatal error:  Uncaught TypeError: date(): Argument #2 ($timestamp) must be of type ?int, string given in /home/index.php:2

Dizgeyi önce strtotime() veya bir nesneyle dönüştürün:

Çıktı:

14/03/2026
14/03/2026
bool(false)
bool(true)

Dikkat edilmesi gereken iki şey daha: m ay, i dakikadır, bu yüzden 'H:m' dakika istediğiniz yere ayı yazdırır; ve new DateTimeImmutable('garbage') false döndürmek yerine bir istisna fırlatır, bu yüzden kullanıcı girdisini try/catch ile sarın ya da uyuşmazlıkta false döndüren DateTimeImmutable::createFromFormat() ile ayrıştırın.

Sıkça Sorulan Sorular

PHP'de güncel tarihi nasıl alırım?

date() fonksiyonunu bir biçim dizgesiyle çağırın: echo date('Y-m-d'); bugünün tarihini 2026-03-14 gibi yazdırır ve date('Y-m-d H:i:s') saati ekler. Nesne sürümü (new DateTimeImmutable())->format('Y-m-d') şeklindedir.

PHP'de bir tarihe nasıl gün eklerim?

Bir DateTimeImmutable üzerinde modify() kullanın: (new DateTimeImmutable('2026-03-14'))->modify('+7 days')->format('Y-m-d') 2026-03-21 verir. Zaman damgalarıyla date('Y-m-d', strtotime('+7 days', $timestamp)) aynısını yapar.

PHP'de iki tarih arasındaki farkı nasıl hesaplarım?

Bir tarih üzerinde diğeriyle diff() çağırın: $a->diff($b) bir DateInterval döndürür. Onun days özelliği toplam gün sayısıdır; y, m, d ise yılları, ayları ve günleri tutar, birinin yaşını bu şekilde hesaplarsınız.

PHP'de bir Unix zaman damgasını tarihe nasıl çeviririm?

Onu date() fonksiyonunun ikinci argümanı olarak verin: date('Y-m-d H:i:s', 1773479107) UTC'de 2026-03-14 09:05:07 döndürür. Bir nesne için new DateTimeImmutable('@1773479107') kullanın.

PHP date() neden yanlış saati gösteriyor?

date() varsayılan saat dilimini kullanır; bu php.ini içindeki date.timezone ayarından gelir ve çoğu zaman UTC'dir. Betiğin başında date_default_timezone_set('Europe/Berlin') ile kendinizinkini ayarlayın ya da DateTimeImmutable sınıfına bir DateTimeZone verin.

Coddy programlama dilleri çizimi

Coddy ile kodlamayı öğren

BAŞLA