30 Ekim 2007 Salı

PHP ile Zaman Fonksiyonları

Merhaba Webkolog dostlarım!

Web uygulamalarında tarih ve saatlerle çalışmak kaçınılmazdır. Bir blog yazısının yayınlanma zamanını göstermekten, kullanıcıların son girişlerini kaydetmeye, etkinlik tarihlerini yönetmekten zaman damgalarıyla işlem yapmaya kadar birçok senaryoda zaman fonksiyonlarına ihtiyaç duyarız. PHP, bu tür karmaşık işlemleri kolayca yapabilmemiz için bize kapsamlı bir **zaman ve tarih fonksiyonları** seti sunar. Bu makalede, PHP 5.2 versiyonunda bulunan bu temel fonksiyonları keşfedeceğiz. Hadi gelin, zamanı kodlarımızla yakalayalım!


1. Zaman Damgaları ve Temel Bilgiler

PHP'de zaman işleme, genellikle **Unix Zaman Damgası (Unix Timestamp)** adı verilen bir kavram etrafında döner. Bu, 1 Ocak 1970 (UTC) tarihinden itibaren geçen saniye sayısını temsil eden bir tam sayıdır. Çoğu zaman fonksiyonu bu formatla çalışır.


<?php
// Şimdiki zamanı Unix Zaman Damgası olarak döndürür: time()
$simdiki_zaman = time();
echo "Şimdiki Unix Zaman Damgası: " . $simdiki_zaman . "<br>"; // Örn: 1678886400

echo "<hr>";

// Girilen tarih ve saat bilgisini alarak diziye kaydeder: getdate()
$tarih_bilgileri = getdate($simdiki_zaman);
echo "<h5>getdate() ile tarih bilgileri:</h5>";
echo "<pre>";
print_r($tarih_bilgileri);
echo "</pre>";
/* Çıktı Örneği:
Array
(
    [seconds] => 0
    [minutes] => 0
    [hours] => 0
    [mday] => 15
    [wday] => 5
    [mon] => 3
    [year] => 2023
    [yday] => 73
    [weekday] => Friday
    [month] => March
    [0] => 1678886400
)
*/

echo "<hr>";

// Şimdiki zamanı (mikrosaniye hassasiyetiyle) verir: gettimeofday()
// Bu fonksiyon genellikle daha detaylı zaman ölçümleri için kullanılır.
$mikro_zaman = gettimeofday();
echo "<h5>gettimeofday() ile zaman bilgileri:</h5>";
echo "<pre>";
print_r($mikro_zaman);
echo "</pre>";
/* Çıktı Örneği:
Array
(
    [sec] => 1678886400
    [usec] => 123456
    [minuteswest] => -180
    [dsttime] => 0
)
*/
?>

2. Tarih ve Saat Biçimlendirme

Unix zaman damgaları insanlar için pek okunabilir değildir. Bu yüzden onları anlaşılır formatlara dönüştürmek için biçimlendirme fonksiyonları kullanırız.


<?php
$simdiki_zaman = time();

// Bu fonksiyon, biri seçmeli iki parametre alır. Zaman damgasını biçimlendirir: date()
echo "Bugünün tarihi (GG.AA.YYYY): " . date("d.m.Y", $simdiki_zaman) . "<br>"; // Çıktı: 15.03.2023
echo "Şimdiki saat (HH:MM:SS): " . date("H:i:s", $simdiki_zaman) . "<br>"; // Çıktı: 14:30:00 (Örnek)
echo "Haftanın günü ve yıl: " . date("l, d F Y", $simdiki_zaman) . "<br>"; // Çıktı: Wednesday, 15 March 2023 (Örnek)

echo "<hr>";

// Zaman ve tarihi yerel ayarlara göre biçimlendirir: strftime()
// Biçimlendirme kodları date() fonksiyonundan farklıdır ve sistemin yerel ayarlarından etkilenir.
// setlocale(LC_TIME, 'tr_TR.UTF-8'); // Türkçe yerel ayar için (Linux'ta çalışır)
// setlocale(LC_TIME, 'turkish'); // Windows için denenebilir

echo "Yerel biçimlendirilmiş tarih (strftime): " . strftime("%A, %d %B %Y %H:%M:%S", $simdiki_zaman) . "<br>";
// Çıktı Örneği (Türkçe lokalde): Çarşamba, 15 Mart 2023 14:30:00

// Zaman ve tarihi Greenwich Mean Time (GMT)/UTC standartlarına göre biçimlendirir: gmdate(), gmstrftime()
echo "GMT/UTC Tarih (gmdate): " . gmdate("Y-m-d H:i:s", $simdiki_zaman) . "<br>";
echo "GMT/UTC Tarih (gmstrftime): " . gmstrftime("%Y-%m-%d %H:%M:%S", $simdiki_zaman) . "<br>";
?>

3. Tarih Oluşturma ve Dönüştürme

Belirli bir tarihi Unix zaman damgasına dönüştürmek veya string halindeki tarih ifadelerini ayrıştırmak için kullanışlı fonksiyonlar.


<?php
// Verdiğiniz tarih bilgilerini Unix Zaman Damgasına çevirir: mktime()
// mktime(saat, dakika, saniye, ay, gün, yıl)
$ozel_tarih_timestamp = mktime(10, 30, 0, 7, 15, 2025); // 15 Temmuz 2025, 10:30:00
echo "15 Temmuz 2025, 10:30:00 Unix Zaman Damgası: " . $ozel_tarih_timestamp . "<br>";
echo "Biçimlendirilmiş: " . date("Y-m-d H:i:s", $ozel_tarih_timestamp) . "<br>";

echo "<hr>";

// Tarihi ve zamanı GMT olarak zaman damgasına dönüştürür: gmmktime()
$gmt_ozel_tarih_timestamp = gmmktime(10, 30, 0, 7, 15, 2025);
echo "15 Temmuz 2025, 10:30:00 GMT Unix Zaman Damgası: " . $gmt_ozel_tarih_timestamp . "<br>";
echo "Biçimlendirilmiş (GMT): " . gmdate("Y-m-d H:i:s", $gmt_ozel_tarih_timestamp) . "<br>";

echo "<hr>";

// Karakter katarı biçimindeki tarih ifadesinin Unix timestamp'ını verir: strtotime()
$gelecek_tarih_timestamp = strtotime("+1 week"); // Bir hafta sonra
echo "Bir hafta sonraki zaman damgası: " . $gelecek_tarih_timestamp . "<br>";
echo "Biçimlendirilmiş: " . date("Y-m-d", $gelecek_tarih_timestamp) . "<br>";

$belirli_string_tarih = strtotime("2024-10-20 14:00:00");
echo "2024-10-20 14:00:00 zaman damgası: " . $belirli_string_tarih . "<br>";

echo "<hr>";

// Girilen tarihin doğru olup olmadığını kontrol eder: checkdate()
// checkdate(ay, gün, yıl)
if (checkdate(12, 31, 2023)) {
    echo "31.12.2023 geçerli bir tarihtir.<br>";
} else {
    echo "31.12.2023 geçerli bir tarih değildir.<br>";
}

if (checkdate(2, 30, 2023)) { // 2023 Şubat 30 çekmez
    echo "30.02.2023 geçerli bir tarihtir.<br>";
} else {
    echo "30.02.2023 geçerli bir tarih değildir.<br>"; // Çıktı: 30.02.2023 geçerli bir tarih değildir.
}
?>

4. Yerel Saat Bilgileri ve Tam Sayı Biçimlendirme

Sisteminizin yerel saat ayarlarından etkilenen tarih bilgilerini dizi olarak almak veya tarih/saat bileşenlerini tam sayı olarak elde etmek için kullanışlıdır.


<?php
// Yerel saati verir. Sonuç olarak bir dizi döndürür: localtime()
$yerel_zaman_dizi = localtime(time(), true); // true parametresi ilişkisel dizi döndürür
echo "<h5>localtime() ile yerel zaman bilgileri:</h5>";
echo "<pre>";
print_r($yerel_zaman_dizi);
echo "</pre>";
/* Çıktı Örneği:
Array
(
    [tm_sec] => 0
    [tm_min] => 30
    [tm_hour] => 14
    [tm_mday] => 15
    [tm_mon] => 2
    [tm_year] => 123
    [tm_wday] => 3
    [tm_yday] => 73
    [tm_isdst] => 0
)
*/

// Yerel saati veya tarihi tamsayı olarak biçimlendirir: idate()
// idate() sadece tek bir tarih/saat bileşenini döndürür.
echo "Şu anki yıl (idate): " . idate("Y") . "<br>"; // Çıktı: 2023
echo "Şu anki ay (idate): " . idate("m") . "<br>"; // Çıktı: 03
echo "Şu anki gün (idate): " . idate("d") . "<br>"; // Çıktı: 15
echo "Şu anki saat (idate - 24 saat formatı): " . idate("H") . "<br>"; // Çıktı: 14 (Örnek)
?>

5. Güneş Doğuşu/Batışı ve MySQL Zaman Fonksiyonları

PHP, coğrafi konuma göre güneş doğuşu ve batışı gibi bilgilere erişmenizi de sağlar. Ayrıca, MySQL'deki bazı zaman fonksiyonları da dokümanlarınızda yer aldığı için onlara da kısaca değineceğim.


<?php
// Verilen tarih ve yer için güneşin doğuşu zamanını verir: date_sunrise()
// date_sunrise(timestamp, format, enlem, boylam, sapma, zaman_dilimi)
// İstanbul için örnek enlem ve boylam
$enlem = 41.00;
$boylam = 28.97;
$gunes_dogusu = date_sunrise(time(), SUNFUNCS_RET_STRING, $enlem, $boylam, 90.5, 3); // Saat olarak string döner
echo "İstanbul için bugünkü güneş doğuşu: " . $gunes_dogusu . "<br>";

// Verilen tarih ve yer için günbatımı zamanını verir: date_sunset()
$gunes_batisi = date_sunset(time(), SUNFUNCS_RET_STRING, $enlem, $boylam, 90.5, 3);
echo "İstanbul için bugünkü gün batımı: " . $gunes_batisi . "<br>";

echo "<hr>";

// MySQL tabanlı zaman fonksiyonları (PHP'de değil, MySQL sorgularında kullanılır)
// Sadece bilgi amaçlıdır, PHP fonksiyonları değildirler.
echo "<h5>MySQL Zaman Fonksiyonları (Bilgilendirme Amaçlı):</h5>";
echo "NOW(): MySQL'de şimdiki tarih ve saati verir (YYYY-MM-DD HH:MM:SS formatı).<br>";
echo "CURDATE(): MySQL'de bugünün tarihini verir (YYYY-MM-DD formatı).<br>";
echo "CURTIME(): MySQL'de geçerli saati verir (HH:MM:SS formatı).<br>";
echo "YEAR(tarih): MySQL'de verilen tarihin yılını döndürür.<br>";
echo "MONTHNAME(tarih): MySQL'de verilen tarihin ay ismini döndürür.<br>";
echo "DATEDIFF(tarih1, tarih2): MySQL'de iki tarih arasındaki gün farkını döndürür.<br>";
echo "DATE_ADD(tarih, INTERVAL değer birim): MySQL'de tarihe belirli bir aralık ekler.<br>";
echo "DATE_SUB(tarih, INTERVAL değer birim): MySQL'de tarihten belirli bir aralık çıkarır.<br>";
// Bu fonksiyonlar, MySQL sorgularınızın içinde kullanılmak üzere tasarlanmıştır, doğrudan PHP kodu içinde çağrılmazlar.
?>

PHP'nin zaman fonksiyonları, web uygulamalarınızın zamanla ilgili her türlü ihtiyacını karşılamak için inanılmaz derecede esneklik sunar. Kullanıcıların yerel saatlerine göre bilgileri göstermekten, olayların zamanlamasını yönetmeye kadar, bu fonksiyonlar dinamik ve zaman duyarlı uygulamalar geliştirmenize olanak tanır. Her zaman olduğu gibi, kodlarınızı test etmeyi ve zaman dilimi ayarlarınıza dikkat etmeyi unutmayın!

Webkolog'u takipte kalın!

Hepinize bol kodlu ve keyifli öğrenme süreçleri dilerim!

0 yorum:

Yorum Gönder