Carbon ile Laravel'de Tarih Yönetimi
Adını arkeolojik kazılarda, buluntuların yaşını/dönemini anlayabilmek için yapılan radyoaktif 14C (radyokarbon) izotopundan alan, Laravel'de kullanılan bir PHP uzantısı olan Carbon'dan bahsetmek istiyorum. Günümüz uygulamalarının tarihle ilgili bir şeyler yapmadığı bir senaryo yok gibi bir şey. Haliyle hem kullanıcı girişlerinden hem de hali hazırda üretilmiş olan tarhilere göre tutarlı hesaplama yapmak oldukça hayati bir işlem olabilir. Kullanım süresi dolan ürünler, teslimat tarileri ya da en basitinden kullanıcının doğum günün kutlama... Buna benzer onlarca yüzlerce örnek yazılabilir.
İşte hal böyleyken, Laravel ekibi de kendi kütüphanalerini yazmaktansa doğrusunu yapıp bu işi gerçekten layıkıyla yapan Carbon'u Laravel'e dahil etmişler. Carbon ile tarih namına yapamayacağınız bir şey yok gibi. En azından benim aklımdan geçen her şeyin kütüphaneye eklendiğini gördüm. Rehber olması açısından bazı kullanım örneklerini de buraya eklemek istetim. Tamamını yazmak gibi bir şansımız yok gibi bir şey. Ne demek istediğimi Nestbot'un sayfasına bakarsanız anlayacağınızı düşünüyorum. Bir Blade sayfası içinde kullanabileceğiniz şekliyle örnekleri aşağıya ekliyorum.
@php
use Carbon\Carbon;
Carbon::setLocale('tr');
$date1 = '2010-03-15 22:15:51';
$date2 = '2020-07-22 13:45:18';
$date3 = '2030-04-10 15:12:44';
$month = '2'; //String
$day = 9; //Integer
$year = 1970; //Integer
$tz = 'Europe/Istanbul';
@endphp
{{Carbon::now()}} // 2024-01-17 13:56:25
{{Carbon::now()->year}} // 2024
{{Carbon::now()->month}} // 1
{{Carbon::now()->day}} // 17
{{Carbon::now()->hour}} // 13
{{Carbon::now()->minute}} // 56
{{Carbon::now()->second}} // 25
{{Carbon::now()->dayOfWeek}} // 3
{{Carbon::now()->dayOfYear}} // 17
{{Carbon::now()->weekOfMonth}} // 3
{{Carbon::now()->daysInMonth}} // 31
{{Carbon::now()->daysInYear}} // 366
{{Carbon::today()}} // 2024-01-17 00:00:00
{{Carbon::yesterday()}} // 2024-01-16 00:00:00
{{Carbon::tomorrow()}} // 2024-01-18 00:00:00
{{Carbon::parse('last day of february 2025')}} // 2025-02-28 00:00:00
{{Carbon::createFromDate($year, $month, $day, $tz)}} // 1970-02-09 13:56:25
{{Carbon::parse($date1)}} // 2010-03-15 22:15:51
{{Carbon::parse($date1)->format('d-m-Y')}} // 15-03-2010
{{Carbon::parse($date1)->format('d-m-Y H:i:s')}} // 15-03-2010 22:15:51
{{Carbon::parse($date1)->format('D, d M Y H:i:s')}} // Mon, 15 Mar 2010 22:15:51
{{Carbon::parse($date1)->translatedFormat('D, d F Y H:i:s')}} // Pts, 15 Mart 2010 22:15:51
{{Carbon::parse($date1)->diffInDays($date2)}} // 3781
{{Carbon::parse($date1)->diffInMonths($date2)}} // 124
{{Carbon::parse($date1)->diffInYears($date2)}} // 10
{{Carbon::parse($date1)->diffForHumans($date2)}} // 10 yıl önce
{{Carbon::now()->isBirthday()}} // 1
{{Carbon::parse($date2)->isPast()}} // 1
{{Carbon::parse($date3)->isFuture()}} // 1
{{Carbon::parse($date3)->diffInDays(now())}} // 2275
{{Carbon::parse($date1)->format('c')}} // 2010-03-15T22:15:51+02:00 //ISO 8601
{{Carbon::parse($date1)->format('e')}} // Europe/Istanbul
{{Carbon::parse($date1)->addMonths('3')}} // 2010-06-15 22:15:51
{{Carbon::parse($date1)->subMonths('3')}} // 2009-12-15 22:15:51
{{Carbon::parse($date1)->addYears('3')}} // 2013-03-15 22:15:51
{{Carbon::parse($date1)->subYears('3')}} // 2007-03-15 22:15:51
Burada dikkat çekmek istediğim bir nokta var. Laravel içinde varsayılan lokalizasyon, sizin uygulamanızın ayarlarından alınır. Ama duruma ya da sayfaya göre yerelleştirme yapmak istiyorsanız sayfa içinde yukarıda olduğu gibi setLocale değişkenini override etmeyi unutmayınız. Zaten örneklerde de görüldüğü üzere translatedFormat kullanımı ile varsayılan İngilizce dilinden Türkçeye çevirildiğini görürsünüz. Ben herhangi bir çeviri de yapmadım. Hali hazırda pakette gerekli çeviriler mevcut. Ayrıca formatla ilgili kısaltmaları da aşağıdaki listeden inceleyebilirsiniz. Tabloyu kaynağından aldım ve çevirmeye üşendim :)
Code | Example | Description |
---|---|---|
OD | 5 | Day number with alternative numbers such as 三 for 3 if locale is ja_JP |
OM | 1 | Month number with alternative numbers such as ၀၂ for 2 if locale is my_MM |
OY | 2017 | Year number with alternative numbers such as ۱۹۹۸ for 1998 if locale is fa |
OH | 17 | 24-hours number with alternative numbers such as ႑႓ for 13 if locale is shn_MM |
Oh | 5 | 12-hours number with alternative numbers such as 十一 for 11 if locale is lzh_TW |
Om | 4 | Minute number with alternative numbers such as ୫୭ for 57 if locale is or |
Os | 5 | Second number with alternative numbers such as 十五 for 15 if locale is ja_JP |
D | 5 | Day of month number (from 1 to 31) |
DD | 05 | Day of month number with trailing zero (from 01 to 31) |
Do | 5th | Day of month with ordinal suffix (from 1st to 31th), translatable |
d | 4 | Day of week number (from 0 (Sunday) to 6 (Saturday)) |
dd | Th | Minified day name (from Su to Sa), translatable |
ddd | Thu | Short day name (from Sun to Sat), translatable |
dddd | Thursday | Day name (from Sunday to Saturday), translatable |
DDD | 5 | Day of year number (from 1 to 366) |
DDDD | 005 | Day of year number with trailing zeros (3 digits, from 001 to 366) |
DDDo | 5th | Day of year number with ordinal suffix (from 1st to 366th), translatable |
e | 4 | Day of week number (from 0 (Sunday) to 6 (Saturday)), similar to "d" but this one is translatable (takes first day of week of the current locale) |
E | 4 | Day of week number (from 1 (Monday) to 7 (Sunday)) |
H | 17 | Hour from 0 to 23 |
HH | 17 | Hour with trailing zero from 00 to 23 |
h | 5 | Hour from 0 to 12 |
hh | 05 | Hour with trailing zero from 00 to 12 |
k | 17 | Hour from 1 to 24 |
kk | 17 | Hour with trailing zero from 01 to 24 |
m | 4 | Minute from 0 to 59 |
mm | 04 | Minute with trailing zero from 00 to 59 |
a | pm | Meridiem am/pm |
A | PM | Meridiem AM/PM |
s | 5 | Second from 0 to 59 |
ss | 05 | Second with trailing zero from 00 to 59 |
S | 0 | Second tenth |
SS | 08 | Second hundredth (on 2 digits with trailing zero) |
SSS | 084 | Millisecond (on 3 digits with trailing zeros) |
SSSS | 0845 | Second ten thousandth (on 4 digits with trailing zeros) |
SSSSS | 08451 | Second hundred thousandth (on 5 digits with trailing zeros) |
SSSSSS | 084512 | Microsecond (on 6 digits with trailing zeros) |
SSSSSSS | 0845120 | Second ten millionth (on 7 digits with trailing zeros) |
SSSSSSSS | 08451200 | Second hundred millionth (on 8 digits with trailing zeros) |
SSSSSSSSS | 084512000 | Nanosecond (on 9 digits with trailing zeros) |
M | 1 | Month from 1 to 12 |
MM | 01 | Month with trailing zero from 01 to 12 |
MMM | Jan | Short month name, translatable |
MMMM | January | Month name, translatable |
Mo | 1st | Month with ordinal suffix from 1st to 12th, translatable |
Q | 1 | Quarter from 1 to 4 |
Qo | 1st | Quarter with ordinal suffix from 1st to 4th, translatable |
G | 2017 | ISO week year |
GG | 2017 | ISO week year (on 2 digits with trailing zero) |
GGG | 2017 | ISO week year (on 3 digits with trailing zeros) |
GGGG | 2017 | ISO week year (on 4 digits with trailing zeros) |
GGGGG | 02017 | ISO week year (on 5 digits with trailing zeros) |
g | 2017 | Week year according to locale settings, translatable |
gg | 2017 | Week year according to locale settings (on 2 digits with trailing zero), translatable |
ggg | 2017 | Week year according to locale settings (on 3 digits with trailing zeros), translatable |
gggg | 2017 | Week year according to locale settings (on 4 digits with trailing zeros), translatable |
ggggg | 02017 | Week year according to locale settings (on 5 digits with trailing zeros), translatable |
W | 1 | ISO week number in the year |
WW | 01 | ISO week number in the year (on 2 digits with trailing zero) |
Wo | 1st | ISO week number in the year with ordinal suffix, translatable |
w | 1 | Week number in the year according to locale settings, translatable |
ww | 01 | Week number in the year according to locale settings (on 2 digits with trailing zero) |
wo | 1st | Week number in the year according to locale settings with ordinal suffix, translatable |
x | 1483635845085 | Millisecond-precision timestamp (same as date.getTime() in JavaScript) |
X | 1483635845 | Timestamp (number of seconds since 1970-01-01) |
Y | 2017 | Full year from -9999 to 9999 |
YY | 17 | Year on 2 digits from 00 to 99 |
YYYY | 2017 | Year on 4 digits from 0000 to 9999 |
YYYYY | 02017 | Year on 5 digits from 00000 to 09999 |
YYYYYY | +002017 | Year on 5 digits with sign from -09999 to +09999 |
z | UTC | Abbreviated time zone name |
zz | UTC | Time zone name |
Z | +00:00 | Time zone offset HH:mm |
ZZ | +0000 | Time zone offset HHmm |