Mengenal Carbon di Laravel (Kupas Tuntas Tanggal dan Waktu)

Mari kita kupas lebih dalam tentang penggunaan Carbon di Laravel. Bagaimana cara penggunaan Carbon yang baik dan benar.

Seperti postingan saya sebelumnya mengenai Merubah tanggal di Laravel. Pada postingan kali ini akan kita kupas sedalam-dalamnya.

Setup

Untuk menggunakan Carbon, kita membutuhkan import class Carbon. Anda dapat menggunakan cara dibawah untuk menggunakan Carbon:

<?php
use Carbon\Carbon;

Setelah mengimport code tersebut, kita baru dapat menggunakannya. Cukup mudah bukan.

Getting a Specific Date/Time

// 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', 'America\Pacific');

Membuat tanggal dengan lebih baik dan terkontrol

Selain cara cepat untuk menentukan tanggal / waktu, Carbon juga memungkinkan kita membuat tanggal / waktu dari sejumlah argumen tertentu.

Carbon::createFromDate($year, $month, $day, $tz);
Carbon::createFromTime($hour, $minute, $second, $tz);
Carbon::create($year, $month, $day, $hour, $minute, $second, $tz);

Kode diatas sangat membantu saat Anda mendapatkan semacam tanggal atau waktu dalam format yang biasanya tidak dikenali oleh Carbon. Jika Anda mengirimkan null untuk salah satu atribut tersebut, defaultnya adalah saat ini.

Manipulasi Tanggal

Memperoleh tanggal / waktu bukanlah satu-satunya hal yang perlu Anda lakukan saat coding berkutik dengan tanggal. Anda sering kali perlu memanipulasi tanggal atau waktu.

Misalnya, saat membuat masa uji coba untuk pengguna, Anda ingin masa uji coba berakhir setelah jangka waktu tertentu. Jadi katakanlah kita memiliki masa uji coba 30 hari. Kita dapat dengan mudah menghitung waktu itu dengan menambah dan mengurangi.

Untuk masa percobaan ini, kami akan melakukan:

// get the current time
$current = Carbon::now();

// add 30 days to the current time
$trialExpires = $current->addDays(30);

Dari dokumen Carbon, berikut adalah beberapa metode add () dan sub () lain yang tersedia untuk kita:

$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

Getter dan Setter

Cara cepat lain untuk memanipulasi atau membaca waktu adalah dengan menggunakan getter dan setter yang tersedia.

$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);

Kita bahkan bisa merangkai beberapa setter

$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();

Formating

Dalam contoh di atas, Anda mungkin telah memperhatikan metode – & gt; toDateTimeString (). Kami dapat dengan mudah memformat tanggal / waktu untuk tujuan kami. Dalam hal ini, kami mendapat string datetime.

$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

Relative Date

Carbon, memudahkan kita untuk menampilkan waktu relative diff() method. Sebagai contoh, kita menginginkan menampilkan waktu 3 jam yang lalu, bagaimana caranya?

$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

Display Difference for Humans

Untuk menampilkan waktu relative, terkadang lebih mudah dibaca oleh manusia daripada menggunakan timestamp().

Sebagai contoh, format postingan dengan 20:39 dibandingkan dengan 3 jam yang lalu. Mana yang lebih enak dibaca?

Menggunakan sintak diffForHumans() dapat menghitung waktu tersebut.

$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

Conclusion

Okeh, begitulah kira-kira setelah kita bahas lebih lanjut, lebih dalam mengenai Carbon di Laravel, ternyata banyak sekali yang dapat kita kreasikan menggunakan package Carbon.


Leave a Reply