Tarih ve Zaman Kütüphaneleri


    × Bunları biliyor muydunuz?
"Kontrolcü yöntemlerine parametre olarak enjekte edilen sınıfların örneklerine aynı zamanda görünmlerinden de erişebilirsiniz."


Tarih ve Zaman ile ilgili işlevleri yerine getiren bir sınıftır. Bu kütüphane standart tarih ve saat biçimlerinin dışında özel çevrimleri de kullanmaktadır. Böylece daha akılda kalıcı tarih ve zaman terimleri kullanılabilir hale getirilmiştir. Bu bölümde Date ve Time olmak üzere iki kütüphanenin anlatımına yer verilmiştir. Her iki kütüphanenin özünde yaptığı işler aynı olsa da karakter setlerinde ve yerel ayarlamalarında küçük farklılıklar bulunmaktadır.

 

 

# Yerel Ayarları Yapılandırma


Yerel tarih, saat ve bölge ayarlarını yapılandırırmak için aşağıdaki yapılandırma dosyası kullanılır.

Dosya: Config/Project.php
DateTime
string $timezone = 'Europe/Istanbul' Saat dilimini belirlemek için bölge seçimi.
array $locale = [] [REMOVED] [2023-01-03] PHP 8.0 ile strftime() yönteminin kullanımdan kaldırılmasından dolayı bu yapılandırma geçerliliğini kaybetmiştir. 

 

 

# Kurulum


ZN dağıtımları için kurulum gerekmez.

↓ composer require znframework/package-datetime

 

 

# Yöntemler


Tarih Yöntemleri
Date::set(string $exp) : string
Date::calculate(string $input, string $calculate, string $output = 'Y-m-d') : string
Date::compare(string $value1, string $condition, string $value2) : bool
Date::toNumeric(string $dateFormat, int $now = NULL) : int
Date::toReadable(int $now = NULL, string $dateFormat = 'Y-m-d H:i:s') : string
Date::convert(string $date, string $format) : string
Date::standart() : string
Date::isPast(string $datetime) : bool
Date::check(string $datetime) : bool
Date::now() : string
Date::quarter(string $datetime = NULL) : int
Date::dayCount(string $datetime = NULL) : int
Date::lMethods(mixed ...$parameters, string $lang = DEFAULT) : string
Date::isDay(string $date = NULL) : bool
Date::isMonth(string $date = NULL) : bool
Date::isWeekend(string $date = NULL) : bool
Date::today(string $date = NULL) : string
Date::todayNumber(string $date = NULL) : string
Date::current() : string
Date::next(string $date = NULL) : string
Date::prev(string $date = NULL) : string
Date::add(string $date, int $count = 1) : string
Date::remove(string $date, int $count = 1) : string
Date::diff(string $oldDate, string $newDate) : float
Date::yesterday(string $date = NULL) : string
Date::tomorrow(string $date = NULL) : string
Zaman Yöntemleri
Time::standart() : string
Time::isPast(string $time) : bool
Time::check(string $time) : bool
Time::current() : string
Time::next(string $time = NULL) : string
Time::prev(string $time = NULL) : string
Time::add(string $time = NULL, int $count = 1) : string
Time::remove(string $time = NULL, int $count = 1) : string
Time::diff(string $oldTime, string $newTime) : float
Time::locale(string ...$parameters) : this
Time::zone(string $zone) : this
DT Kütüphanesi Yöntemleri
DT::date(string $date) : this
DT::time(string $time) : this
DT::get(string $output = NULL) : string

 

 

# Özel İfadeler [6.11.0][2021-05-12]


Bu çevrimlerin amacı daha açık ve anlaşılır tarih zaman ifadeleri kullanmaktır. Bu çevrimlerin kullanımı zorunlu değildir. İstenirse standart tarih ve zaman ifadeleri de kullanılabilir.,

Ortak Date ve Time Çevrimleri Anlamları Karşılıklar
{day} Günün tam ismi. Monday, Sunday
{day-} Günün kısaltılmış hali. Mon, Sun
{dayInWeek} Haftanın kaçıncı günü. 1 - 7
{dayInMonth} Ayın kaçıncı günü. Sıfırlı gösterim. 01 - 30
{dayInMonth-} Ayın kaçıncı günü. Sıfırsız gösterim. 1 - 30
{dayInYear} Yılın kaçıncı günü. Birden başlar. 1 - 366
{dayInYear-} Yılın kaçıncı günü. Sıfırdan başlar. 0 - 365
{dayCountInMonth} İlgili ayın gün sayısı. 28, 29, 30, 31
{weekInYear} Yılın kaçıncı haftası. 1 - 52
{month} Ayın tam ismi. January
{month-} Ayın kısaltılmış ismi. Jan
{monthInYear} Yıldaki kaçıncı ay. Sıfırlı gösterim 01 - 12
{monthInYear-} Yıldaki kaçıncı ay. Sıfırsız gösterim. 1 - 12
{century} İçinde bulunulan yüzyıl. 21
{century-} İçinde bulunulan yüzyıl. Tarihin ilk 2 hanesine göre. 20
{year} Yılın tam gösterimi. 2021
{year-} Yılın kısaltılmış gösterimi. 21
{isLeapYear} Artık yıl mı? Şubat ayının 29 çektiği yıl mı kontrolüdür. 0 - 1
{hour} 24'lük saat gösterimi. Sıfırlı gösterim 01 - 24
{hour-} 24'lük saat gösterimi. Sıfırsız gösterim 1 - 24
{clock} 12'lik saat gösterimi. Sıfırlı gösterim. 01 - 12
{clock-} 12'lik saat gösterimi. Sıfırsız gösterim. 1 - 12
{minute} Dakika gösterimi. Sıfırlı gösterim. 01 - 59
{second} Saniye gösterimi. Sıfırlı gösterim. 01 - 59
{msecond} Mikro saniye gösterimi. 000000
{am} Büyük harfli AM, PM gösterimi. AM, PM
{am-} Küçük harfli am, pm gösterimi. am, pm
{iso} ISO formatlı tarih zaman gösterimi. 2021-05-12T15:17:36+03:00
{rfc} RFC formatlı tarih zaman gösterimi. Wed, 12 May 2021 15:17:36 +0300
{unix} UNIX formatlı tarih zaman gösterimi. 1620821856
Uyarı: Özel ifadelerin gösterimi 6.11.0 sürümü itibari ile değiştirildi. Ancak geriye dönük uyumluluk açısından eski kullanımların geçerliliği devam etmektedir.

 

 

# Set


Güncel tarih ve zaman ifadesi oluşturmak için kullanılır.

string $exp Tarih zaman ifadesi.
return string

Kullanımı

echo Date::set('{year}-{monthInYear}-{dayInMonth} {hour}:{minute}:{second}');
2021-11-05 15:46:52

Standart İfadeler

İstenirse özel ifadeler yerine standart ifadeler de kullanılabilir.

echo Date::set('Y-m-d H:i:s');
2021-11-05 15:46:52

 

 

# Calculate


Tarih bilgisi üzerinde ekleme çıkarma gibi işlemler gerçekleştirmek için kullanılmaktadır

string $input Tarih girdisi.
string $calculate Eklenecek veya çıkarılacak değer.
string $output Çıktının deyimsel dizilimi.
return string

Kullanımı

echo Date::calculate('{year}-{monthInYear}-{dayInMonth}', '30 day');
2017-01-30
echo Date::calculate('01/12/2015', '-30 day', '{dayInMonth}-{monthInYear}-{year}');
01-11-2015

Zaman hesaplaması için aşağıdaki gibi kullanabilirsiniz.

echo Date::calculate('10:30', '-30 minutes', '{hour}:{minute}');
10:00

 

 

# Compare


Tarih bilgilerini karşılaştırmak için kullanılır.

string $value1 1. tarih bilgisi.
string $compare Karşılaştırma ifadesi.
string $output 2. tarih bilgisi
return bool

Kullanımı

echo Date::compare('2015-02-15', '>', '2015-02-14'); 
true

 

 

# ToNumeric


Tarih bilgisini sayısal veriye dönüştürmek için kullanılır.

string $dateFormat Tarih formatı.
int $now = NULL Göreli tarihlerin hesaplanması için bir taban olarak kullanılan zaman damgası.
return int

Kullanımı

echo Date::toNumeric('2015-02-15');
1423951200 

 

 

# ToReadable


Sayısal veriyi okunabilir tarih ve zamana çevirir.

int $time Sayısal veri.
string $dateFormat Tarih formatı.
return string

Kullanımı

echo Date::toReadable('1423951200', '{year}-{monthInYear}-{dayInMonth}');
2015-02-15

 

 

# Convert


Tarih bilgisininin formatını değiştirmek için kullanılır.

string $date Tarih bilgisi.
string $newFormat Tarihin yeni formatı.
return string

Kullanımı

echo Date::convert('2015-02-15', '{dayInMonth}/{monthInYear-}/{year}');
15/2/2015

 

 

# Standart


Standart tarih ve zaman bilgisini almak için kullanılır. Eğer bu yöntemi Time sınıfı ile kullanılırsa bölge seçiminin diline göre çevrilir.

return string

Kullanımı

echo Date::standart();
20 February 2016 Saturday, 12:46:55

 

 

# Current


Bu yöntem Time sınıfı ile kullanılırsa aktif saat, Date sınıfı ile kullanılırsa aktif tarih bilgisini verir.

return string

Tarih Kullanımı

echo Date::current();
20.02.2016

Zaman Kullanımı

echo Time::current();
12:52:45

 

 

# IsPast


Zamanın veya tarihin aktif gün veya tarihten daha eski olup olmadığını kontrol eder.

string $datetime Kontrol edilecek tarih veya zaman.
return bool  

Tarih Kullanımı

echo Date::isPast('2017-01-30');
true

Zaman Kullanımı

echo Time::isPast('23:11');
true

 

 

# Check


Zamanın veya tarihin geçerli olup olmadığını kontrol eder.

string $datetime Kontrol edilecek tarih veya zaman.
return bool  

Tarih Kullanımı

echo Date::check('2017-01-30');
true

Zaman Kullanımı

echo Time::check('23:11');
true

 

 

# Now


Veritabanı datetime kolonuna uygun Y-m-d H:i:s biçimi çıktı üretir.

return string

Kullanımı

echo Date::now(); 
2019-02-21 20:00:00

 

 

# Quarter [8.0.0][2023-01-03]


Güncel tarihin veya belirtilen tarihin hangi çeyrekte olduğunu belirtir.

string $datetime = NULL Kontrol edilecek tarih. Boş bırakılırsa güncel tarih kabul edilir.
return int  

Kullanımı

output( Date::quarter('2017-03-30') );
output( Date::quarter('2017-05-30') );
1
2

[string $datetime]

Bu parametrenin boş geçilmesi durumunda güncel tarih dikkate alınır. Güncel tarih 2023-01-30 kabul edilirse;

output( Date::quarter() );
1

1. ay ilk çeyrekte olduğu için 1 çıktısı elde edilir. 

 

 

# DayCount [8.1.0][2023-03-07]


Güncel tarihin veya belirtilen tarihin ilgili ay içinde kaç gün bulunduğu bilgisini verir.

string $datetime = NULL Kontrol edilecek tarih. Boş bırakılırsa güncel tarih kabul edilir.
return int  

Kullanımı

output( Date::dayCount('2017-03-30') );
31

 

 

# lMethods [8.0.0][2023-01-03]


Tarih metinleri İngilizce çıktılanmaktadır. Bu yöntem sayiesinde çıktının Lang::set() ile ayarlanan sistem diline göre çıktı üretmesi ya da istenilen durumda istenilen dile göre çıktı üretmesi artık mümkün. Hangi yöntem kullanılacaksa dile duyarlı olması için yöntemin başına [ l ] (le) harfi eklenmelidir. 

mixed ...$parameters İlgili yönteme ait parametreler...
string $lang = DEFAULT
Standart parametre diziliminden sonra kullanılır. Bu parametre belirtilmezse sistemin diline göre çıktı üretir.
Kullanılabilir Seçenekler tr, en Bu seçenekleri genişletmek için: Settings/Expressions.php dosyasında yer alan 'date' dizisi kullanılabilir.
return int  

Kullanımı

output( Date::set('{day}') );        # Monday
output( Date::lset('{day}', 'tr') ); # Pazartesi
Monday
Pazartesi

[string $lang]

Bu parametre belirtilmez ise Config/Project.php dosyasında yer alan 'language'  anahtarına göre çıktı üretecektir.

output( Date::lset('{day}') ); # Monday
Monday
Bilgi: Tüm Date:: yöntemleri ile kullanılabilmektedir. 

 

 

# Locale


Yereli ayarlar. Kullanımı setlocale(LC_ALL, ...$parameters) gibidir.

string ...$parameters Yerel parametreleri.
return this  

Kullanımlar

Time::locale('en_US.UTF-8');

 

 

# Zone


Saat dilimini ayarlar. Kullanımı timezone() gibidir.

string $zone Geçerli bölge adı
return this  

Kullanımlar

Time::zone('America/Toronto');

 

 

# IsDay


Bugünün hangi gün olup olmadığını kontrol eder. Bu yöntem çağrılabilir gün isimlerini içerebilir.

string $date = NULL Bu parametrenin boş geçilmesi durumunda bugünün aksi halde belirlenen tarihin kontrolünü yapar.
return bool  

Kullanımlar

echo Date::isSaturday()# true or false.
echo Date::isMonday()# true or false.

 

 

# IsMonth


Bu ayın hangi ay olup olmadığını kontrol eder. Bu yöntem çağrılabilir ay isimlerini içerebilir.

string $date = NULL Bu parametrenin boş geçilmesi durumunda bugünün aksi halde belirlenen tarihin kontrolünü yapar.
return bool  

Kullanımlar

echo Date::isJanuary()# true or false.
echo Date::isJune()# true or false.

 

 

# IsWeekend


Bugün veya belirli bir tarihin hafta sonuna denk gelip gelmediğini kontrol eder.

string $date = NULL Bu parametrenin boş geçilmesi durumunda bugünün aksi halde belirlenen tarihin kontrolünü yapar.
return bool  

Kullanımlar

echo Date::isWeekeend()# Bugün hafta sonu mu?
echo Date::isWeekeend('2015/01/30')# 20015/01/30 tarihi hafta sonu mu?

 

 

# Today


Bugünün veya belirtilen tarihin hangi gün olduğunu bilgisini verir.

string $date = NULL Bu parametrenin boş geçilmesi durumunda bugünün aksi halde belirlenen tarihin kontrolünü yapar.
return string  

Kullanımlar

echo Date::today(); # Sunday
echo Date::today('1988/01/21'); # Thursday

 

 

# TodayNumber


Bugünün veya belirtilen tarihin ayın kaçıncı günü olduğunu bilgisini verir.

string $date = NULL Bu parametrenin boş geçilmesi durumunda bugünün aksi halde belirlenen tarihin kontrolünü yapar.
return string  

Kullanımlar

echo Date::todayNumber(); # 3
echo Date::todayNumber('1988/01/21'); # 21

 

 

# Next


Bugünün veya belirtilen zamanın belirtilen türe (gün, ay, yıl...) göre sonraki değerini verir.

string $date = NULL
Bu parametrenin boş geçilmesi durumunda bugünün aksi halde belirlenen tarih veya zamanın kontrolünü yapar.
return string  

Tarih Kullanımları

output( Date::nextDay() ); # Monday
output( Date::nextDayNumber() ); # 4
output( Date::nextDayNumber('2018/01/15') ); # 16
output( Date::nextMonth() ); # July
output( Date::nextMonth('2018/01/15') ); # February
output( Date::nextMonthNumber() ); # 7
output( Date::nextMonthNumber('2018/01/15') ); # 2
output( Date::nextYear() ); # 2019
output( Date::nextYear('2018/01/15') ); # 2019

Zaman Kullanımları

output( Time::nextHour() ); # 12
output( Time::nextHour('12:30') ); # 13
output( Time::nextMinute() ); # 13
output( Time::nextMinute('12:30') ); # 31
output( Time::nextSecond() ); # 17
output( Time::nextSecond('12:30:50') ); # 51

 

 

# Prev


Bugünün veya belirtilen zamanın belirtilen türe (gün, ay, yıl...) göre önceki değerini verir.

string $date = NULL
Bu parametrenin boş geçilmesi durumunda bugünün aksi halde belirlenen tarih veya zamanın kontrolünü yapar.
return string  

Tarih Kullanımları

output( Date::prevDay() ); # Saturday
output( Date::prevDay('2018/01/15') ); # Sunday
output( Date::prevDayNumber() ); # 2
output( Date::prevDayNumber('2018/01/15') ); # 14
output( Date::prevMonth() ); # May
output( Date::prevMonth('2018/01/15') ); # December
output( Date::prevMonthNumber() ); # 5
output( Date::prevMonthNumber('2018/01/15') ); # 12
output( Date::prevYear() ); # 2017
output( Date::prevYear('2018/01/15') ); # 2017

Zaman Kullanımları

output( Time::prevHour() ); # 10
output( Time::prevHour('12:30') ); # 11
output( Time::prevMinute() ); # 12
output( Time::prevMinute('12:30') ); # 29
output( Time::prevSecond() ); # 41
output( Time::prevSecond('12:30:50') ); # 49

 

 

# Add


Bugünün veya belirtilen zamanın belirtilen türe (gün, ay, yıl...) göre aynı türden değer ekler.

string $date = NULL
Hesaplama işlemi yapılacak tarih veya zaman bilgisi. 2. parametrenin boş bırakılması durumunda 1. parametre 2. parametre gibi davranır ve fark hesaplama işlemini aktif tarih veya zaman üzerinden yapar.
int $count = 1 Hesaplamaya dahil edilecek değer.
return string  

Tarih Kullanımları

output( Date::addDay(5) ); # 2018-06-08
output( Date::addDay('2018/01/15', 5) ); # 2018-01-20
output( Date::addWeek(5) ); # 2018-07-08
output( Date::addWeek('2018/01/15', 5) ); # 2018-02-19
output( Date::addMonth(5) ); # 2018-11-03
output( Date::addMonth('2018/01/15', 5) ); # 2018-06-15
output( Date::addYear(5) ); # 2023-06-03
output( Date::addYear('2018/01/15', 5) ); # 2023-01-15

Zaman Kullanımları

output( Time::addHour(5) ); # 16:27:51
output( Time::addHour('12:30', 5) ); # 17:30:00
output( Time::addMinute(5) ); # 11:32:51
output( Time::addMinute('12:30', 5) ); # 12:35:00
output( Time::addSecond(5) ); # 11:27:56
output( Time::addSecond('12:30', 5) ); # 12:30:05

Tarih ve Zaman Kullanımları

Şayet tarih ve saat içeren bir veriye işlem yapacaksanız Date:: kütüphanesini kullanın.

output( Date::addHour('2023/01/17 14:00', 2) ); # 2023-01-17 16:00

 

 

# Remove


Bugünün veya belirtilen zamanın belirtilen türe (gün, ay, yıl...) göre aynı türden değer çıkartır.

Parametreler

string $date = NULL
Hesaplama işlemi yapılacak tarih veya zaman bilgisi. 2. parametrenin boş bırakılması durumunda 1. parametre 2. parametre gibi davranır ve fark hesaplama işlemini aktif tarih veya zaman üzerinden yapar.
int $count = 1 Hesaplamaya dahil edilecek değer.
return string  

Tarih Kullanımları

output( Date::removeDay(5) ); # 2018-05-29
output( Date::removeDay('2018/01/15', 5) ); # 2018-01-10
output( Date::removeWeek(5) ); # 2018-04-29
output( Date::removeWeek('2018/01/15', 5) ); # 2017-12-11
output( Date::removeMonth(5) ); # 2018-01-03
output( Date::removeMonth('2018/01/15', 5) ); # 2017-08-15
output( Date::removeYear(5) ); # 2013-06-03
output( Date::removeYear('2018/01/15', 5) ); # 2013-01-15

Zaman Kullanımları

output( Time::removeHour(5) ); # 12:34:28
output( Time::removeHour('12:30', 5) ); # 07:30:00
output( Time::removeMinute(5) ); # 17:29:28
output( Time::removeMinute('12:30', 5) ); # 12:25:00
output( Time::removeSecond(5) ); # 17:34:23
output( Time::removeSecond('12:30', 5) ); # 12:29:55

Tarih ve Zaman Kullanımları

Şayet tarih ve saat içeren bir veriye işlem yapacaksanız Date:: kütüphanesini kullanın.

output( Date::removeHour('2023/01/17 14:00', 2) ); # 2023-01-17 12:00

 

 

# Diff


Bugünün veya belirtilen zamanın belirtilen diğer tarih ile belirtilen türe(gün, ay, yıl) göre farkını hesaplar.

string $oldDate Farkı hesaplanacak tarih veya zaman bilgisi. 2. parametrenin boş bırakılması durumunda 1. parametre 2. parametre gibi davranır ve fark hesaplama işlemini aktif tarih veya zaman üzerinden yapar.
string $newDate = 'Y-m-d H:i:s'
Farkı hesaplanacak diğer tarih veya zaman bilgisi.
return float  

Biçim

Söz Dizimi [Date|Time]::diff[Day|Week|Month|Year|Hour|Minute|Second][Up|Down|Average]($p1, $p2)
Sınıf Adı Date|Time Date:: sınıfı tarihsel veri üzerinde işlem yaparken Time:: zamansal veri üzerinde işlem yapar.
Yöntem Adı Day|Week|Month|Year|Hour|Minute|Second Kullanılabilir diff yöntemleri. 
Yuvarlama Seçenekler Up|Down|Average Up Yukarıya yuvarlar.
Down Aşağıya yuvarlar.
Average ondalıklı hanenin 5'ten az olması durumunda aşağı aksi halde yukarı yuvarlar.

Tarih Kullanımları

output( Date::diffDayDown('2019/12/15') ); # 560
output( Date::diffDayUp('2017/10/20', '2018/01/15') ); # 88
output( Date::diffWeekDown('2018/08/15') ); # 10
output( Date::diffWeekUp('2017/10/20', '2018/01/15') ); # 13
output( Date::diffMonthDown('2019/12/15') ); # 18
output( Date::diffMonthAverage('2017/10/20', '2018/01/15') ); # 3
output( Date::diffYearUp('2019/01/15') ); # 1
output( Date::diffYearAverage('2017/10/20', '2018/01/15') ); # 0

Zaman Kullanımları

output( Time::diffHourUp('23:30') ); # 5
output( Time::diffHourAverage('21:30', '23:30') ); # 2
output( Time::diffMinute('12:30') ); # 750
output( Time::diffMinute('12:30', '14:30') ); # 120
output( Time::diffSecond('12:30') ); # -22328
output( Time::diffSecond('12:30', '14:30') ); # 7200
Dikkat: 1. parametrenin 2. parametreden büyük olması durumunda çıktı negatif olur.

 

 

# DT


Bu kütüphane ortak bir tarih/zaman verisi üzerinde yukarıdaki yer alan yöntemler aracılığı ile işlem yapabilmek için oluşturulmuştur. Tarih üzerinde işlem yapılacaksa DT::date() zaman üzerinde işlem yapılacaksa DT::time() şeklinde kullanılmalı ve mutlaka DT::get() ile sonlandırılmalıdır.

Kullanımlar

echo DT::date('2018/01/01')->addDay(5)->addMonth(2)->get();
2018/03/06

Biçimlendirme

Çıktıyı biçimlendirmek için;

echo DT::date('2018/01/01')->addDay(5)->addMonth(2)->get('{dayNumber0}-{monthNumber0}-{year}');
06-03-2018

Zaman

Zamanlarla çalışmak için;

echo DT::time('10:20')->removeMinute(2)->addHour(1)->get();
11:18:00