Giriş
PHP'de tarih ve saatle çalışmak en kolay veya en net görevler değildir. strtotime
Biçimlendirme sorunları, birçok hesaplama ve daha fazlasıyla uğraşmalıyız .
Carbon adlı şık paket , PHP'de tarih / saatle uğraşmayı çok daha kolay ve anlamsal hale getirmeye yardımcı olabilir, böylece kodumuz daha okunabilir ve sürdürülebilir hale gelebilir.
Carbon, Brian Nesbit tarafından PHP'nin kendi DateTime sınıfını genişleten bir pakettir .
PHP'deki tarihlerle başa çıkmak için bazı güzel işlevler sağlar. Özellikle aşağıdaki gibi şeyler:
- Saat dilimleriyle ilgilenmek
- Şimdiki zamanı kolayca almak
- Bir tarih-saati okunabilir bir şeye dönüştürmek
- İngilizce bir ifadeyi datetime olarak ayrıştırın (Ocak 2016'nın ilk günü )
- Toplama ve Çıkarma tarihleri ( + 2 hafta , -6 ay )
- Tarihlerle uğraşmanın anlamsal yolu
Yukarıdakilerin tümü, PHP'de zamanlarla başa çıkmayı çocuk oyuncağı haline getiren çok kullanışlı bir pakete yol açar.
Kurulum
Carbon'u kullanmak için, Carbon'u Carbon
ad alanından içe aktarmanız gerekir . Şansımıza, Carbon zaten Laravel'e dahil edildi, bu yüzden gidip Composer ile eklemeye gerek yok .
Carbon'u ne zaman kullanmamız gerekirse, şu şekilde ithal edebiliriz:
<?php
use CarbonCarbon;
İçe aktardıktan sonra, bu harika paketle yapabileceğimiz bazı harika şeylere bakalım.
Belirli Bir Tarih / Saat Alma
// get the current time - 2015-12-19 10:10:54
$current = Carbon::now();
$current = new Carbon();
// get today - 2015-12-19 00:00:00
$today = Carbon::today();
// get yesterday - 2015-12-18 00:00:00
$yesterday = Carbon::yesterday();
// get tomorrow - 2015-12-20 00:00:00
$tomorrow = Carbon::tomorrow();
// parse a specific string - 2016-01-01 00:00:00
$newYear = new Carbon('first day of January 2016');
// set a specific timezone - 2016-01-01 00:00:00
$newYearPST = new Carbon('first day of January 2016', 'AmericaPacific');
Daha Hassas Kontrolle Tarihler Oluşturma
Tarihi / saatleri tanımlamanın hızlı yollarına ek olarak, Carbon ayrıca belirli sayıda argümandan tarih / saatler oluşturalım.
Carbon::createFromDate($year, $month, $day, $tz);
Carbon::createFromTime($hour, $minute, $second, $tz);
Carbon::create($year, $month, $day, $hour, $minute, $second, $tz);
Normalde Carbon tarafından tanınmayan bir formatta bir tür tarih veya saat aldığınızda bunlar çok faydalıdır. null
Bu niteliklerden herhangi biri için geçerseniz , varsayılan olarak geçerli olacaktır.
Tarih / Saatin Değiştirilmesi
Tarihlerle çalışırken yapmanız gereken tek şey tarihi / saati almak değil. Çoğu zaman tarih veya saati değiştirmeniz gerekecektir.
Örneğin, bir kullanıcı için bir deneme süresi oluştururken, deneme süresinin belirli bir süre sonra sona ermesini isteyeceksiniz. Diyelim ki 30 günlük bir deneme süremiz var. Bu zamanı add
ve ile kolayca hesaplayabiliriz subtract
.
Bu deneme süresi için şunları yapardık:
// get the current time
$current = Carbon::now();
// add 30 days to the current time
$trialExpires = $current->addDays(30);
Gönderen Karbon docs , burada diğer bazılarıdır add()
ve sub()
bize sunulan yöntemler ise:
$dt = Carbon::create(2012, 1, 31, 0);
echo $dt->toDateTimeString(); // 2012-01-31 00:00:00
echo $dt->addYears(5); // 2017-01-31 00:00:00
echo $dt->addYear(); // 2018-01-31 00:00:00
echo $dt->subYear(); // 2017-01-31 00:00:00
echo $dt->subYears(5); // 2012-01-31 00:00:00
echo $dt->addMonths(60); // 2017-01-31 00:00:00
echo $dt->addMonth(); // 2017-03-03 00:00:00 equivalent of $dt->month($dt->month + 1); so it wraps
echo $dt->subMonth(); // 2017-02-03 00:00:00
echo $dt->subMonths(60); // 2012-02-03 00:00:00
echo $dt->addDays(29); // 2012-03-03 00:00:00
echo $dt->addDay(); // 2012-03-04 00:00:00
echo $dt->subDay(); // 2012-03-03 00:00:00
echo $dt->subDays(29); // 2012-02-03 00:00:00
echo $dt->addWeekdays(4); // 2012-02-09 00:00:00
echo $dt->addWeekday(); // 2012-02-10 00:00:00
echo $dt->subWeekday(); // 2012-02-09 00:00:00
echo $dt->subWeekdays(4); // 2012-02-03 00:00:00
echo $dt->addWeeks(3); // 2012-02-24 00:00:00
echo $dt->addWeek(); // 2012-03-02 00:00:00
echo $dt->subWeek(); // 2012-02-24 00:00:00
echo $dt->subWeeks(3); // 2012-02-03 00:00:00
echo $dt->addHours(24); // 2012-02-04 00:00:00
echo $dt->addHour(); // 2012-02-04 01:00:00
echo $dt->subHour(); // 2012-02-04 00:00:00
echo $dt->subHours(24); // 2012-02-03 00:00:00
echo $dt->addMinutes(61); // 2012-02-03 01:01:00
echo $dt->addMinute(); // 2012-02-03 01:02:00
echo $dt->subMinute(); // 2012-02-03 01:01:00
echo $dt->subMinutes(61); // 2012-02-03 00:00:00
echo $dt->addSeconds(61); // 2012-02-03 00:01:01
echo $dt->addSecond(); // 2012-02-03 00:01:02
echo $dt->subSecond(); // 2012-02-03 00:01:01
echo $dt->subSeconds(61); // 2012-02-03 00:00:00
Getters ve Setters
Zamanı değiştirmenin veya okumanın bir başka hızlı yolu, mevcut alıcıları ve ayarlayıcıları kullanmaktır.
$dt = Carbon::now();
// set some things
$dt->year = 2015;
$dt->month = 04;
$dt->day = 21;
$dt->hour = 22;
$dt->minute = 32;
$dt->second = 5;
// get some things
var_dump($dt->year);
var_dump($dt->month);
var_dump($dt->day);
var_dump($dt->hour);
var_dump($dt->second);
var_dump($dt->dayOfWeek);
var_dump($dt->dayOfYear);
var_dump($dt->weekOfMonth);
var_dump($dt->daysInMonth);
Hatta bazı ayarlayıcıları bir araya getirebiliriz
$dt = Carbon::now();
$dt->year(1975)->month(5)->day(21)->hour(22)->minute(32)->second(5)->toDateTimeString();
$dt->setDate(1975, 5, 21)->setTime(22, 32, 5)->toDateTimeString();
$dt->setDateTime(1975, 5, 21, 22, 32, 5)->toDateTimeString();
Biçimlendirme
Yukarıdaki örnekte, ->toDateTimeString()
yöntemi fark etmiş olabilirsiniz . Tarihi / saati amaçlarımız için kolayca biçimlendirebiliriz. Bu durumda, bir datetime dizesi elde ederiz.
$dt = Carbon::now();
echo $dt->toDateString(); // 2015-12-19
echo $dt->toFormattedDateString(); // Dec 19, 2015
echo $dt->toTimeString(); // 10:10:16
echo $dt->toDateTimeString(); // 2015-12-19 10:10:16
echo $dt->toDayDateTimeString(); // Sat, Dec 19, 2015 10:10 AM
// ... of course format() is still available
echo $dt->format('l jS of F Y h:i:s A'); // Saturday 19th of December 2015 10:10:16 AM
Göreli Zaman
Karbon, zamanı diff()
yöntemlerle göreceli olarak kolayca göstermemizi sağlar .
Örneğin, diyelim ki bir blogumuz var ve 3 saat önce yayınlanmış bir zamanı göstermek istedik . Bunu bu yöntemlerle yapabilirdik.
Farkı Bulmak
Bu yöntemler sadece fark sayısını bulmak için kullanılır.
$current = Carbon::now();
$dt = Carbon::now();
$dt = $dt->subHours(6);
echo $dt->diffInHours($current); // -6
echo $current->diffInHours($dt); // 6
$future = $current->addMonth();
$past = $current->subMonths(2);
echo $current->diffInDays($future); // 31
echo $current->diffInDays($past); // -62
Kullanıcılar İçin Farkı Göstermek
Zamanı göreceli olarak görüntülemek, okuyucular için bazen bir tarih veya zaman damgasından daha yararlı olabilir.
Örneğin, 08:12 gibi bir gönderinin saatini görüntülemek yerine, saat 3 saat önce olarak görüntülenecektir .
diffForHumans()
Yöntem farkının hesaplanması ve aynı zamanda bir insani okunabilir bir biçime dönüştürülmesi için kullanılır.
İşte bazı örnekler:
$dt = Carbon::now();
$past = $dt->subMonth();
$future = $dt->addMonth();
echo $dt->subDays(10)->diffForHumans(); // 10 days ago
echo $dt->diffForHumans($past); // 1 month ago
echo $dt->diffForHumans($future); // 1 month before
Sonuç
Carbon'un yapabileceği daha çok şey var. Resmi Carbon belgelerine baktığınızdan emin olun . Umarım bu, PHP'de tarih / saatleri daha kolay kullanmaya yardımcı olur ve geliştirme sürelerini hızlandırır!