Featured image of post Mengubah Kolom Tanggal Menjadi Carbon Secara Otomatis Laravel

Mengubah Kolom Tanggal Menjadi Carbon Secara Otomatis Laravel

Foratting tanggal untuk ditampilkan ke user sangatlah penting. Dengan menggunakan Carbon, kita dapat dengan mudah mengubah format tanggal sesuai keinginan kita.

Seperti yang kita ketahui, di Laravel kta memiliki kolom created_at dan updated_at yang secara otomatis berisi sebuah tanggal. Kolom tersebut memiliki tipe data timestamp yang digunakan untuk menyimpan tanggal dan waktu kapan data tersebut dibuat dan diubah. Kolom ini sangat berguna saat kita ingin menampilkan data berdasarkan filter ataupun sorting data. Misalkan jika kita ingin menampilkan data dari terbaru terlebih dahulu atau menampilkan data terakhir dibuat. Contoh lain misalkan kita ingin menampilkan data yang dibuat dalam rentang waktu bulan ini, tahun ini atau seminggu terakhir.

Untuk melakukan filter data pada kolom created_at dan updated_at kita dapat menggunakan method yang tersedia oleh library Carbon. Hal ini karena kolom tersebut secara otomatis akan di casting menjadi instances dari class Carbon.

Filtering data berdasarkan tahun

Untuk melakukan filter data yang dibuat pada tahun tertentu, kita dapat menggunakan sintaks berikut

1
2
3
4
5
6
use Carbon\Carbon;

// ...

$year = 2023;
$filteredByYear = YourModel::whereYear('created_at', $year)->get();

Sedangkan jika kita menggunakan PHP Native tanpa bantuan Carbon, syntaxnya sedikit lebih panjang

1
2
3
4
5
$year = 2023;
$filteredByYear = array_filter($yourDataArray, function ($item) use ($year) {
    $createdAt = date('Y', strtotime($item['created_at']));
    return $createdAt == $year;
});

Format tanggal

Carbon juga sangat memudahkan kita untuk menampilkan data tanggal dalam format lain, misalnya kita memiliki data di database dengan format YYYY/MM/DD seperti 2023/10/18 dan kita ingin menampilkan tanggal tersebut dalam format lain, misalkan d/m/Y menjadi 18/10/2023

1
2
3
4
$yourModel = YourModel::find(1); // Misalkan mengambil data dari model

// Mengambil created_at dalam format 'd/m/Y'
$formattedDate = $yourModel->created_at->format('d/m/Y');

Bahkan kita juga bisa menampilkan dalam format sesuai kehendak kita. Misalkan disini saya akan menampilkan nama bulan dan tahun saja.

1
2
3
4
$yourModel = YourModel::find(1); // Misalkan mengambil data dari model

// Mengambil created_at dalam format 'F Y'
$formattedDate = $yourModel->created_at->format('F Y') // October 2023

Format F Y akan menghasilkan output string dengan format bulan dan tahun, seperti January 2022 atau February 2022 . Dengan menggunakan Carbon kita bahkan dapat men-translate nama bulan tadi menjadi bahasa sesuai keinginan kita, misalkan bahasa indonesia atau yang lainnya

1
2
3
4
5
6
7
$yourModel = YourModel::find(1); // Misalkan mengambil data dari model

// Mengambil created_at dalam format 'F Y'
Carbon::setLocale('id');
$formattedDate = $yourModel->created_at->translatedFormat('F Y') // Oktober 2023
Carbon::setLocale('ar');
$formattedDate = $yourModel->created_at->translatedFormat('F Y') // أكتوبر 2023

Cara membuat kolom tanggal di database otomatis format Carbon

Jika kita memiliki kolom di database yang memiliki tipe data waktu, seperti DATE, DATETIME atau yang lainnya dan kita ingin seacar otomatis menggunakan carbon sebagai formatter kolom tersebut, kita dapat mengatur pada Model yang berkaitan dengan kolom di database tersebut.

1
2
3
4
5
6
7
class NamaModel extends Model {
 
    protected $casts = [
        'kolom_tanggal' => 'date',
    ];
 
}

Misalkan disini saya membuat model Pegawai yang memilki kolom tanggal masuk di database, kita dapat mengatur casting tanggal seperti berikut:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
class Pegawai extends Model
{

    protected $table = 'pegawai';

    protected $fillable = [
        'nama',
         ...
        'tgl_masuk'
    ];

    protected $casts = [
        'tgl_masuk' => 'date'
    ];
}

Dengan demikian nantinya kita dapat menampilkan data tanggal masuk dalam format sesuai keinginan kita.

1
2
3
4
5
$pegawai = Pegawai::find(1); // misal mengambil data pegawai

$bulan_masuk = $pegawai->tgl_masuk->month; // output berupa bulan dalam bentuk integer misal : 10

$tanggal = $pegawai->tgl_masuk->format('l, d F Y'); // output berupa nama hari, tanggal, nama bulan tahun misal : Wednesday, 18 October 2023

Untuk menampilkan data dalam format lain kalian dapat membaca dokumentasi lengkap dari Carbon

Untuk dokumentasi lebih lengkap tentang casting tipe data pad model, silakan buka dokumentasi https://laravel.com/docs/eloquent-mutators#custom-casts

Dibangun dengan Hugo
Tema Stack dirancang oleh Jimmy