Membuat Format Tanggal Bahasa Indonesia Dengan PHP
Biasanya, tanggal standar yang disimpan pada database berformat YYYY-MM-DD, misal 2016-03-20, sedangkan ketika ditampilkan pada web biasanya menggunakan nama bulan misal 20 Maret 2016.
PHP sendiri telah menyediakan banyak fungsi untuk mengubah format tanggal, namun, semua format tanggal tersebut berbahasa Inggris, misal, Anda ubah tanggal diatas dengan menyertakan nama bulan
echo date('d F Y', strtotime('2016-03-20')); // Hasil 20 March 2016 // Tanggal sekarang echo date('d F Y'); // Hasil 17 December 2016
Membuat Format Tanggal Indonesia Dengan PHP
Karena Anda tidak bisa menggunakan fungsi bawaan PHP secara penuh, maka, untuk untuk mengubah nama bulan ke bahasa Indonesia, kita harus melakukannya secara “semi manual”, dimana Anda mendefinisikan nama bulan satu persatu.
Ide dasarnya adalah sebagai berikut:
$bulan = array (1 => 'Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember' ); echo $bulan[3]; // Maret
Pada contoh diatas, Anda menggunakan array yang berisi nama bulan.
Seperti pada pembahasan tentang array, index awal dari array bisa angka 0 atau 1. Pada contoh diatas, Anda buat index dengan nilai awal 1, sehingga sama dengan bilangan bulan (1 s.d 12);
Selanjutnya, agar script tidak ditulis berulang ulang, maka kita perlu memasukkannya ke dalam fungsi, sehingga, nantinya kita cukup memanggil nama fungsi tersebut:
function tanggal_indo($tanggal) { $bulan = array (1 => 'Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember' ); $split = explode('-', $tanggal); return $split[2] . ' ' . $bulan[ (int)$split[1] ] . ' ' . $split[0]; } echo tanggal_indo('2016-03-20'); // 20 Maret 2016
Penjelasan:
Pertama tama, dengan fungsi explode kita pecah tanggal berdasarkan tanda dash (-). Hasil pemecahan tersebut berupa array, selanjutnya, Anda simpan array tersebut pada variabel $split. Contoh cara kerja fungsi explode:
$tanggal = '2016-03-20'; $split = explode('-', $tanggal); echo '<pre>'; print_r($split); /* Hasil: Array ( [0] => 2016 [1] => 03 [2] => 20 )*/
Selanjutnya, dengan statemen return, kita kirim hasil ke pemanggil fungsi.
Karena menggunakan 2 digit bulan, maka Anda perlu mengubahnya menjadi satu digit, salah satunya dengan mengubah tipe datanya menjadi integer: dengan type casting ( (int) $split[1] ) atau bisa dengan perkalian ( 1 * $split[1] )
Format Tanggal Indonesia Dengan PHP – Menambahkan Nama Hari
Selanjutnya, pada kondisi tertentu kita perlu untuk menambahkan nama hari pada tanggal tersebut. Untuk keperluan tersebut, PHP juga telah menyediakan format karakternya, yaitu menggunakan l (huruf kecil dari L), misal:
// Hari ini: echo date('l, d F Y'); // Hasil: Saturday, 17 December 2016
Lagi lagi nama hari juga menggunakan bahasa Inggris, untuk mengubahnya ke dalam bahasa Indonesia, lagi lagi tidak ada cara lain kecuali kita menuliskan nama hari satu per satu.
Ide dasar script yang akan Anda buat:
$hari = array ( 1 => 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu', 'Minggu' ); // Misal hari ini adalah sabtu echo date('N'); // Hasil 6 echo $hari[ date('N') ]; // Sama seperti echo $hari[6], hasil: Sabtu // Contoh tanggal 20 Maret 2016 adalah hari Minggu $num = date('N', strtotime('2016-03-20')); echo $num; // Hasil 7 echo $hari[$num]; // Hasil: Minggu
Pada script diatas, kita menggunakan format N untuk mendapatkan nomer urut dari hari yang dimulai dari 1 untuk Senin, dan terakhir 7 untuk Minggu.
Selanjutnya, mari Anda perbarui fungsi tanggal_indo sehingga dapat menampilkan nama hari:
function tanggal_indo($tanggal, $cetak_hari = false) { $hari = array ( 1 => 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu', 'Minggu' ); $bulan = array (1 => 'Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember' ); $split = explode('-', $tanggal); $tgl_indo = $split[2] . ' ' . $bulan[ (int)$split[1] ] . ' ' . $split[0]; if ($cetak_hari) { $num = date('N', strtotime($tanggal)); return $hari[$num] . ', ' . $tgl_indo; } return $tgl_indo; } echo tanggal_indo ('2016-03-20'); // Hasil: 20 Maret 2016; echo tanggal_indo ('2016-03-20', true); // Hasil: Minggu, 20 Maret 2016
Pada contoh diatas, Anda tambahkan argumen baru pada fungsi yaitu $cetak_hari dengan nilai default false. Argumen tersebut sebagai opsi apakah nantinya fungsi menghasilkan nama hari atau tidak.
III. Format Tanggal Indonesia Dengan PHP – Mengambil Data Dari Database
Dalam praktek, format tanggal Indonesia ini lebih sering digunakan ketika Anda ingin menampilkan data tanggal dari database. Misal Anda memiliki tabel artikel dengan data sebagai berikut:
+------------+-------------------------------------+---------------------+ | id_artikel | judul_artikel | tanggal_terbit | +------------+-------------------------------------+---------------------+ | 1 | Format Tanggal Indonesia Dengan PHP | 2016-10-12 08:53:27 | | 2 | Memahami Return Pada PHP | 2016-11-10 11:22:20 | | 3 | Memahami Fungi Pada PHP | 2016-12-01 15:54:37 | +------------+-------------------------------------+---------------------+
Tabel tersebut berada di dalam database website.
Selanjutnya, mari Anda tampilkan data tersebut menggunakan format tanggal Bahasa Indonesia dengan menggunakan fungsi tanggal_indo yang telah Anda buat sebelumnya.
Script yang di gunakan:
<?php // FUNGSI function tanggal_indo($tanggal, $cetak_hari = false) { $hari = array ( 1 => 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu', 'Minggu' ); $bulan = array (1 => 'Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember' ); $split = explode('-', $tanggal); $tgl_indo = $split[2] . ' ' . $bulan[ (int)$split[1] ] . ' ' . $split[0]; if ($cetak_hari) { $num = date('N', strtotime($tanggal)); return $hari[$num] . ', ' . $tgl_indo; } return $tgl_indo; } // AMBIL DATA DARI DATABASE $con = @mysqli_connect('localhost', 'root', '', 'tutorial'); if (!$con) { echo "Error: " . mysqli_connect_error(); exit(); } $sql = 'SELECT * FROM artikel'; $query = mysqli_query($con, $sql); // TAMPILKAN DATA echo '<table> <thead> <tr> <th>Judul Artikel</th> <th>Tanggal Terbit</th> </tr> </thead> <tbody>'; while ($row = mysqli_fetch_array($query)) { // Ubah tanggal menjadi yyyy-mm-dd $tanggal = date('Y-m-d', strtotime($row['tanggal_terbit'])); echo '<tr> <td>' . $row['judul_artikel'] . '</td> <td>' . tanggal_indo($tanggal, true) . '</td> </tr>'; } echo '</tbody> </table>';
Hasil yang kita peroleh adalah:
Judul Artikel | Tanggal Terbit |
---|---|
Format Tanggal Indonesia Dengan PHP | Rabu, 12 Oktober 2016 |
Memahami Return Pada PHP | Kamis, 10 November 2016 |
Memahami Fungi Pada PHP | Kamis, 01 Desember 2016 |
Pada contoh diatas, karena format tanggal adalah date time, maka Anda perlu ubah menjadi hanya date saja.
Untuk keperluan tersebut, ada beberapa cara yang dapat ditempuh, bisa menggunakan fungsi date seperti pada contoh diatas, bisa juga menggunakan fungsi explode untuk memecah tanggal berdasarkan spasi:
$split = explode(' ', $row['tanggal_terbit']); $tanggal = $split[0];
Cara Lebih Singkat
Terdapat cara yang lebih singkat untuk menulis tanggal dalam Bahsa Indonesia yaitu dengan mengeset localization menggunakan fungsi setlocale(), tetapi Anda tidak bisa menggunakan fungsi date() karena fungsi ini digunakan khusus untuk mencetak tanggal dalam bahasa Inggris. Fungsi yang dapat digunakan adalah strftime(), misal:
setlocale(LC_ALL, 'id-ID', 'id_ID'); echo strftime("%A, %d %B %Y"); // Hasil: Selasa, 04 April 2020 echo strftime("%A, %d %B %Y", strtotime('2020-10-05')) . "\n"; // Hasil: Senin, 05 Oktober 2020
Untuk referensi lengkap fungsi strftime(), bisa mengunjungi halaman manual fungsi ini: PHP strftime – Manual
Perlu diperhatikan bahwa pada fungsi setlocale(), 'id-ID' berjalan di Windows dan tidak bisa bekerja di Linux, jika menggunakan linux Anda harus menggunakan 'id_ID', sehingga agar dapat berjalan di Windows dan Linux, Anda gunakan keduanya.
Jadi apakah fungsi setlocale() ini reliable atau handal disemua situasi? tergantung kondisi dilapangan. Lebih amannya, tulis code tersebut dalam fungsi tersendiri, misal kita buat fungsi fungsi format_tanggal(...) {...}, sehingga jika terjadi perubahan, misal sebelumnya menggunakan fungsi strftime kemudian beralih ke date() kita hanya perlu mengubah code yang ada di fungsi tersebut, tidak perlu di semua tempat.
Demikian pembahasan mengenai cara mengubah format tanggal Indonesia dengan PHP, semoga bermanfaat.
Posting Komentar