Cara menggunakan format tanggal di html

Pada kesempatan kali ini kita akan membahas cara membuat format tanggal 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, kita ubah tanggal diatas dengan menyertakan nama bulan

<?php
echo date('d F Y', strtotime('2016-03-20')); // Hasil 20 March 2016

// Tanggal sekarang
echo date('d F Y'); // Hasil 17 December 2016

I. Membuat Format Tanggal Indonesia Dengan PHP

Karena kita tidak bisa menggunakan fungsi bawaan PHP secara penuh,  maka, untuk untuk mengubah nama bulan ke bahasa Indonesia, kita harus melakukannya secara “semi manual”, dimana kita 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, kita menggunakan array yang berisi nama bulan.

Seperti pada pembahasan tentang array, index awal dari array bisa angka 0 atau 1. Pada contoh diatas, kita 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, kita simpan array tersebut pada variabel $split. Contoh cara kerja fungsi explode:
  • <?php
    $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 kita 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] )

Lebih lanjut:

  • Tentang fungsi: Memahami Fungsi Pada PHP dan Cara Membuatnya
  • Tentang statemen return pada fungsi: Memahami Statemen Return Pada PHP
  • Tentang array: Memahami Array Pada PHP

II. 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:

<?php
// 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 kita buat:

<?php
$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 kita perbarui fungsi tanggal_indo sehingga dapat menampilkan nama hari:

<?php
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, kita 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 kita ingin menampilkan data tanggal dari database. Misal kita 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 kita tampilkan data tersebut menggunakan format tanggal Bahasa Indonesia dengan menggunakan fungsi tanggal_indo yang telah kita buat sebelumnya.

Script yang kita 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 ArtikelTanggal 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 kita 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:

<?php
$split   = explode(' ', $row['tanggal_terbit']);
$tanggal = $split[0];

IV. Cara Lebih Singkat

Terdapat cara yang lebih singkat untuk menulis tanggal dalam Bahsa Indonesia yaitu dengan mengeset localization menggunakan fungsi setlocale(), tetapi kita 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 kita harus menggunakan 'id_ID', sehingga agar dapat berjalan di Windows dan Linux, kita 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.

Salam…

Subscibe Now

Suka dengan artikel di Jagowebdev.com? jangan sampai ketinggalan, segera join ke milis kami untuk update informasi terbaru dari Jagowebdev.com