PHP'de Zaman Dilimleri
DateTimeZone ve date_default_timezone_set ile birden fazla zaman dilimini yönetin.
PHP'de Zaman Dilimleri, CoddyKit'te ücretsiz bir PHP Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, PHP Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. PHP Academy kursu toplamda 4 dersten oluşur.
Saat Dilimleri Neden Önemlidir
Uygulamanız dünyanın her yerindeki kullanıcılara hizmet veriyorsa saat dilimlerini doğru yönetmek kritik önem taşır. PHP, dönüşümleri doğru biçimde gerçekleştirmek için saat dilimini dikkate alan işlevler ve sınıflar kullanır.
- Zamanları veritabanında her zaman UTC olarak saklayınız
- Yalnızca görüntüleme sırasında kullanıcının yerel saat dilimine dönüştürünüz
date_default_timezone_set()
Tüm tarih işlevleri için varsayılan saat dilimini ayarlayınız:
<?php
// Set at the top of your script or in php.ini
date_default_timezone_set('Europe/Istanbul');
echo date('Y-m-d H:i:s'); // local Istanbul time
echo PHP_EOL;
date_default_timezone_set('UTC');
echo date('Y-m-d H:i:s'); // UTC time
// Or set in php.ini:
// date.timezone = "Europe/London"DateTimeZone Sınıfı
DateTime ile kullanmak üzere saat dilimi nesneleri oluşturunuz:
<?php
$utc = new DateTimeZone('UTC');
$istanbul = new DateTimeZone('Europe/Istanbul');
$ny = new DateTimeZone('America/New_York');
$dt = new DateTime('now', $utc);
echo $dt->format('Y-m-d H:i:s T'); // UTC timeSaat Dilimleri Arasında Dönüştürme
setTimezone() ile bir DateTime'ı farklı bir saat dilimine dönüştürünüz:
<?php
$utcTime = new DateTime('2024-05-27 12:00:00', new DateTimeZone('UTC'));
$istanbul = clone $utcTime;
$istanbul->setTimezone(new DateTimeZone('Europe/Istanbul'));
$newYork = clone $utcTime;
$newYork->setTimezone(new DateTimeZone('America/New_York'));
echo 'UTC: ' . $utcTime->format('H:i T') . PHP_EOL;
echo 'Istanbul: ' . $istanbul->format('H:i T') . PHP_EOL;
echo 'New York: ' . $newYork->format('H:i T') . PHP_EOL;getOffset() ve DST
UTC farkını saniye cinsinden alınız ve DST durumunu kontrol ediniz:
<?php
$tz = new DateTimeZone('America/New_York');
$dt = new DateTime('now', $tz);
$offset = $tz->getOffset($dt); // offset in seconds
$offsetHours = $offset / 3600;
echo 'Offset: ' . $offsetHours . 'h'; // e.g. -5 or -4 in DST
$transitions = $tz->getTransitions(
strtotime('2024-01-01'),
strtotime('2024-12-31')
);
echo 'DST changes in 2024: ' . count($transitions);UTC Olarak Saklama, Yerel Olarak Görüntüleme
En iyi uygulama: UTC'yi veritabanında saklayınız, kullanıcıya yerel saati gösteriniz:
<?php
// Store: always save as UTC
$createdAt = (new DateTimeImmutable('now', new DateTimeZone('UTC')))
->format('Y-m-d H:i:s');
// Display: convert to user's timezone
$userTz = new DateTimeZone($user['timezone'] ?? 'UTC');
$display = (new DateTime($createdAt, new DateTimeZone('UTC')))
->setTimezone($userTz)
->format('d M Y, H:i T');Kullanıcının Saat Dilimini Belirleme
Görüntüleme amacıyla kullanıcının saat dilimini belirleyip saklayınız:
// JavaScript: detect and send to PHP:
// const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
// fetch('/api/set-timezone', { method:'POST', body: tz });
<?php
// PHP: validate and store
$tz = $_POST['timezone'] ?? 'UTC';
$valid = in_array($tz, DateTimeZone::listIdentifiers());
if ($valid) {
$_SESSION['timezone'] = $tz;
setcookie('user_tz', $tz, time() + 365 * 86400);
}DateTimeZone::listIdentifiers()
Geçerli tüm saat dilimi tanımlayıcılarını alınız:
<?php
// All identifiers
$all = DateTimeZone::listIdentifiers();
echo count($all) . ' timezones available';
// Filter by region
$europe = DateTimeZone::listIdentifiers(DateTimeZone::EUROPE);
echo count($europe) . ' European timezones';
// Check if a timezone string is valid
function isValidTimezone(string $tz): bool {
return in_array($tz, DateTimeZone::listIdentifiers());
}
var_dump(isValidTimezone('Europe/Istanbul')); // trueSaat Dilimi Farkını Biçimlendirme
Saat dilimi farkını görüntüleme ve API'ler için biçimlendiriniz:
<?php
$dt = new DateTime('now', new DateTimeZone('America/Los_Angeles'));
echo $dt->format('P'); // +05:30 or -07:00
echo $dt->format('O'); // +0530 (no colon)
echo $dt->format('T'); // PST or PDT
echo $dt->format('e'); // America/Los_Angeles
echo $dt->format('Z'); // offset in secondsUnix Zaman Damgaları Saat Diliminden Bağımsızdır
Unix zaman damgaları, saat diliminden bağımsız olarak belirli bir zaman anını temsil eder; karşılaştırmalar ve hesaplamalar için bunları kullanınız:
<?php
// These represent the same moment:
$utc = new DateTime('2024-05-27 12:00:00', new DateTimeZone('UTC'));
$ist = new DateTime('2024-05-27 15:00:00', new DateTimeZone('Asia/Kolkata'));
echo $utc->getTimestamp(); // same timestamp
echo $ist->getTimestamp(); // same timestamp
var_dump($utc->getTimestamp() === $ist->getTimestamp()); // trueSaat Dilimiyle date_create
date_create ve date_timezone_set ile yordamsal saat dilimi yönetimi:
<?php
$dt = date_create('now', timezone_open('UTC'));
$tz = timezone_open('Europe/Istanbul');
date_timezone_set($dt, $tz);
echo date_format($dt, 'Y-m-d H:i:s T');
// Check transition info
$info = timezone_transitions_get($tz);
echo 'Current offset: ' . ($info[0]['offset'] / 3600) . 'h';Hızlı Kontrol
Küresel olarak dağıtılmış bir uygulamanın tarihleri ve saatleri veritabanında nereye kaydedilmelidir?
Özet: PHP Saat Dilimleri
Saat dilimleriyle ilgili temel bilgiler:
- Varsayılan saat dilimini
date_default_timezone_set()ile ayarlayınız - DateTime ile
DateTimeZonenesnelerini kullanınız - Saat dilimleri arasında dönüşüm yapmak için
setTimezone()kullanınız - UTC'yi her zaman veritabanında saklayınız
- Kullanıcı saat dilimlerini
DateTimeZone::listIdentifiers()ile doğrulayınız - Unix zaman damgaları saat diliminden bağımsız zaman anlarıdır
Sıkça Sorulan Sorular
“PHP'de Zaman Dilimleri” dersi ücretsiz mi?
Evet — “PHP'de Zaman Dilimleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve PHP Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. PHP Academy kursu toplamda 4 dersten oluşur.
“PHP'de Zaman Dilimleri” dersinde ne öğreneceğim?
DateTimeZone ve date_default_timezone_set ile birden fazla zaman dilimini yönetin. PHP Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
PHP Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te PHP Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“PHP'de Zaman Dilimleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu PHP Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her PHP Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Unix Zaman Damgaları ve date()
- DateTime Sınıfı
- DateInterval ile Tarih Aritmetiği
- PHP'de Zaman Dilimleri