ffCCBot/2.0 (http://commoncrawl.org/faq/)
Update: 21-01-2017

Format Tanggal Indonesia Dengan PHP

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:

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 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 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];

Demikian pembahasan mengenai cara mengubah format tanggal Indonesia dengan PHP, semoga bermanfaat.

Recomended Post

9 Feedback dari pembaca

  • Mas, saya mau tanya tentang tipe data tanggal di MySQL. Saya berencana buat advanced search di halaman PHP, di mana ada kriteria pencarian rentang tanggal. Apakah saya harus set MySQL dengan tipe data “date” atau tetap dengan “string”? Karena ada artikel yg mengatakan lbh baik dgn tipe string karena format kolom tipe date di MySQL berbeda dengan PHP, jadi harus dikonversi lagi. Bila dengan string, apakah bisa ditemukan rentang tanggal tertentu? Terima kasih sebelumnya… sukses terus ya Mas!

    • Untuk mencari rentang tanggal, kedua tipe data tersebut bisa digunakan mas, maksudnya “format kolom tipe date di MySQL berbeda dengan PHP, jadi harus dikonversi lagi” apa ya mas?

      Kalau saya pribadi lebih prefer menggunakan tipe data date mas, prinsip saya, gunakan tipe data yang disediakan sesuai dengan kegunaan, karena tiap tipe data akan dioptimasi sesuai dengan jenis data nya. Selain itu, dengan date dapat di pastikan bahwa format tanggal harus yyyy-mm-dd, jika dengan char, user bisa saja memasukkan data dengan format apapun. ruang penyimpanan date sebesar 8 byte, sedangkan char, untuk format yang sama adalah 10 byte

Silakan tinggalkan komentar

Like Us

Dapatkan update artikel terbaru via E-Mail
  1. Tutorial PHP Form II: Menampilkan Hasil Input Form HTML dengan PHP
  2. Tutorial PHP Form I: Menghubungkan Form HTML dengan PHP
  3. Menampilkan Data Dari Beberapa Tabel MySQL – JOIN Pada MYSQL
  4. Memahami dan Menampilkan Tanggal dan Waktu Pada PHP
  5. Menghitung Selisih Waktu Dengan PHP – Cara Termudah
  6. Memahami Fungsi Date Pada PHP
  7. Memahami Fungsi Time, Strtotime, dan Mktime Pada PHP – Memanipulasi Waktu
  8. Memahami Zona Waktu (Timezone) dan Selisih Waktu Pada PHP
  9. Setting ODBC MySQL Untuk Gammu
  10. Cara Install dan Menggunakan Gammu di Windows