Bagaimana Mengubah Format Tanggal di Laravel?

Yugo
Laravel Indonesia
Published in
3 min readMar 4, 2017

Dalam paket instalasi Laravel, disertakan sebuah librari dengan nama Carbon. Librari ini merupakan inherit langsung dari built-in class DateTime dan berfungsi untuk memudahkan manipulasi tanggal dan jam dalam PHP. Sebagai contoh, berikut potongan skrip dalam penggunaan Carbon.

$now = \Carbon\Carbon::now();Carbon\Carbon {#657
+"date": "2017-03-04 06:54:17.000000",
+"timezone_type": 3,
}

Dari variabel $now, kita bisa langung menampilkan output-nya dengan constructor echo atau fungsi print().

echo $now; // 2017-03-04 06:54:17

Variabel $now yang merupakan instance dari Carbon tersebut juga dapat dimodifikasi, semisal ditambahkan/dimajukan satu hari, kemudian diubah formatnya menjadi d, m Y H:i.

$tomorrow = $now->addDays(1);Carbon\Carbon {#658
+"date": "2017-03-05 06:59:07.000000",
+"timezone_type": 3,
+"timezone": "UTC",
}
$nextMonth = $now->addMonths(1);echo $tomorrow->format('d, m Y H:i'); // 05, 03 2017 06:59
echo $nexMonth->format('d, M Y'); // 05, Apr 2017

Tak hanya menyertakan librari Carbon dalam framework, Laravel juga mengintegrasikannya dengan Eloquent ORM.

Sebagai contoh, tabel user memiliki kolom created_at dan updated_at yang secara bawaan definisikan sebagai tipe data datetime. Dalam Eloquent, kedua kolom tersebut direpresentasikan sebagai attribute created_at dan updated_at. Attribute created_at dan updated_at bukanlah berupa string, namun sebuah object yang merupakan instance dari Carbon.

Untuk membuktikannya, kita bisa mengujinya dengan beberapa baris skrip di bawah.

$user = User::find(1);$user->created_at instanceof \Carbon\Carbon; // true
$user->updated_at instanceof \Carbon\Carbon; // true

Selain created_at dan updated_at, kita juga bisa menentukan sendiri attribute yang jenisnya berupa datetime dengan magic property $dates pada Eloquent. Selangkapnya baca pada halaman berikut.

Nah, oleh karena berupa instance dari class Carbon, maka kita dapat menggunakan method yang ada pada Carbon di attribute created_at dan updated_at.

$user = User::find(1);$expirationDate =  $user->created_at->addYears(1);
// 2019-04-05 06:59:07
$lastUpdate = $user->updated_at->format('d, M Y H:i');

Dalam Laravel Blade, dapat ditulis seperti contoh di bawah.

Joined at {{ $user->created_at->diffForHumans() }} 
// 4 days ago

Cukup mudah diimplementasikan bukan?

Bagaimana Jika Ingin Membuat Format Tanggal secara Global?

Yah, tentunya cukup merepotkan menggunakan method format() setiap kali ingin menampilkan tanggal yang sesuai dengan format kebutuhan. Lebih repot lagi, ketika ada perubahan format tanggal, maka kita harus mengganti semuanya. Satu per satu.

Bisakah membuat format tanggalnya menjadi global? Dari yang bawaanya berupa format Y-m-d H:i:s menjadi l, d F Y H:i(Tuesday, 28 February 2017 07:20) misalnya. Jawabannya tentu saja bisa.

Untuk contoh kasus ini, kita bisa memanfaatkan salah satu fitur dari Laravel, yaitu Accessor.

Pada berkas model user, app\User.php, kita bisa menambahkan method dengan nama getCreatedAtAttribute(). Kemudian, dalam method tersebut tambahkan skrip seperti di bawah.

public function getCreatedAtAttribute()
{
return \Carbon\Carbon::parse($this->attributes['created_at'])
->format('d, M Y H:i');
}

Di level Accessor, tipe data attribute created_at (dan updated_at) masih berupa string. Itulah kenapa kita menggunakan Carbon untuk mengubahnya menjadi object, kemudian mengubah formatnya sesuai dengan contoh kasus di atas.

Hal yang sama juga dapat dilakukan untuk mengubah format attribute updated_at.

public function getUpdatedAtAttribute()
{
return \Carbon\Carbon::parse($this->attributes['updated_at'])
->diffForHumans();
}

Sampai di sini, kita sudah berhasil membuat formatnya berubah secara global. Jika ditampilkan, maka akan berbentuk seperti berikut.

echo $user->created_at; // Tuesday, 28 February 2017 07:20
echo $user->updated_at; // 2 hours ago

Bagaimana Mengubah Bahasanya?

Carbon sudah menyediakan fitur lokalisasi yang memungkinkan kita menggunakan bahasa sesuai dengan keinginan. Sebagai contoh saya ingin menggunakan bahasa Indonesia.

\Carbon\Carbon::setLocale('id');echo \Carbon\Carbon::now()->format('l, d F Y H:i');
// Sabtu, 04 Maret 2017 07:38

Agar lokalisasi berlaku secara global di Laravel, tambahkan skrip di bawah pada method boot() dalam berkas app/Providers/AppSserviceProvider.php.

/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
config(['app.locale' => 'id']);
\Carbon\Carbon::setLocale('id');
}

Masih bingung dalam penggunaan? Atau, terdapat kesalahan dalam contoh? Jangan sungkan untuk memberikan respon positif melalui Medium. Segala respon akan saya apreasi dalam bentuk positif pula.

Selamat berkarya! 😄

--

--