Tutorial CodeIgniter : Membuat Helper Untuk Format Tanggal Indonesia di CodeIgniter

Sudah hampir seminggu lebih saya berkutat dengan pekerjaan yang rasanya gak pernah habis, akhirnya jarang bisa posting lagi. Mungkin ini kali yaw rejeki yang diberikan oleh Ida Sang Hyang Widhi Wasa kepada saya :). Yaw walaupun akhirnya saya jarang tidur, jarang kuliah, jarang keluar rumah, badan jadi tambah subur (#haha). Ke kampus cuma untuk mengisi jadwal asisten praktikum, yang makin hari makin semerawut bin acakadut. Mulai dari beberapa dosen yang memanfaatkan ajang asistensi praktikum ini sebagai kesempatan untuk bermalas-malasan, sampai dosen yang (mungkin saking ilmunya tinggi) tidak mau di-asistenkan oleh beberapa mahasiswa yang sudah mendaftarkan diri dan ditunjuk oleh prodi. Kampus saya memang jossssss, walaupun sudah berganti kepemimpinan ternyata tetap saja seperti yang dulu, mungkin kalo pak SBY lihat, beliau akan berkata “Saya prihatin“. Berhubung pikiran saya mumet, jadilah saya pulang ke bali untuk refreshing sejenak. Kebetulan juga besok ibu saya ulang tahun, sekalian ingin mengajak beliau makan-makan di luar pake uang hasil kerja selama beberapa minggu ini.

Nah, sesuai judul postingan di atas, saya malam ini akan membagikan sebuah trik sederhana untuk membuat sebuah helper untuk menampilkan tanggal ke dalam format indonesia. Ini saya gunakan ketika saya membuat sebuah aplikasi website beberapa minggu yang lalu, dimana yang punya web ingin menampilkan format tanggal indonesia. Selain itu, si doi juga ingin menampilkan jarak dari waktu sekarang (tanggal dan waktu sekarang) dengan waktu yang telah ditentukan di waktu sebelumnya . Misalnya tanggal 23-11-2010 (tanggal jadian sama mantan dulu #haha, mendadak #galau), nanti dihitung dari sekarang jadinya sudah berlalu berapa tahun, bulan, minggu, hari, jam, menit. Tapi untuk kasus yang ini, cuma dibatasi 2 variabel saja. Daripada pusing, ayookk kita langsung ke pembuatan helper dan cara penggunaannya di CodeIgniter.

Disini saya membuat 4 buah function, yaitu function tgl_indo(), function bulan() yang akan dipanggil di dalam function tgl_indo(), function nama_hari() dan  function hitung_mundur(). Saya kelompokkan menjadi 1 file helper seperti kode PHP di bawah ini :

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

if ( ! function_exists('tgl_indo'))
{
	function tgl_indo($tgl)
	{
		$ubah = gmdate($tgl, time()+60*60*8);
		$pecah = explode("-",$ubah);
		$tanggal = $pecah[2];
		$bulan = bulan($pecah[1]);
		$tahun = $pecah[0];
		return $tanggal.' '.$bulan.' '.$tahun;
	}
}

if ( ! function_exists('bulan'))
{
	function bulan($bln)
	{
		switch ($bln)
		{
			case 1:
				return "Januari";
				break;
			case 2:
				return "Februari";
				break;
			case 3:
				return "Maret";
				break;
			case 4:
				return "April";
				break;
			case 5:
				return "Mei";
				break;
			case 6:
				return "Juni";
				break;
			case 7:
				return "Juli";
				break;
			case 8:
				return "Agustus";
				break;
			case 9:
				return "September";
				break;
			case 10:
				return "Oktober";
				break;
			case 11:
				return "November";
				break;
			case 12:
				return "Desember";
				break;
		}
	}
}

if ( ! function_exists('nama_hari'))
{
	function nama_hari($tanggal)
	{
		$ubah = gmdate($tanggal, time()+60*60*8);
		$pecah = explode("-",$ubah);
		$tgl = $pecah[2];
		$bln = $pecah[1];
		$thn = $pecah[0];

		$nama = date("l", mktime(0,0,0,$bln,$tgl,$thn));
		$nama_hari = "";
		if($nama=="Sunday") {$nama_hari="Minggu";}
		else if($nama=="Monday") {$nama_hari="Senin";}
		else if($nama=="Tuesday") {$nama_hari="Selasa";}
		else if($nama=="Wednesday") {$nama_hari="Rabu";}
		else if($nama=="Thursday") {$nama_hari="Kamis";}
		else if($nama=="Friday") {$nama_hari="Jumat";}
		else if($nama=="Saturday") {$nama_hari="Sabtu";}
		return $nama_hari;
	}
}

if ( ! function_exists('hitung_mundur'))
{
	function hitung_mundur($wkt)
	{
		$waktu=array(	365*24*60*60	=> "tahun",
						30*24*60*60		=> "bulan",
						7*24*60*60		=> "minggu",
						24*60*60		=> "hari",
						60*60			=> "jam",
						60				=> "menit",
						1				=> "detik");

		$hitung = strtotime(gmdate ("Y-m-d H:i:s", time () +60 * 60 * 8))-$wkt;
		$hasil = array();
		if($hitung<5)
		{
			$hasil = 'kurang dari 5 detik yang lalu';
		}
		else
		{
			$stop = 0;
			foreach($waktu as $periode => $satuan)
			{
				if($stop>=6 || ($stop>0 && $periode<60)) break;
				$bagi = floor($hitung/$periode);
				if($bagi > 0)
				{
					$hasil[] = $bagi.' '.$satuan;
					$hitung -= $bagi*$periode;
					$stop++;
				}
				else if($stop>0) $stop++;
			}
			$hasil=implode(' ',$hasil).' yang lalu';
		}
		return $hasil;
	}
}

  • Function bulan() berisi selection menggunakan switch untuk menentukan nama bulan sesuai parameter yang dimasukkan, kemudian dipanggil di function tgl_indo() untuk diatur formatnya.
  • Function nama_hari() juga bersisikan selection dengan menggunakan if, dimana tanggal yang dimasukkan melalui parameter di-explode terlebih dahulu. Kemudian dicari waktunya dengan menggunakan fungsi mktime(). Hasilnya masih berupa bahasa inggris, kemudian di seleksi menggunakan if.
  • Yang terakhir function hitung_mundur(), mirip dengan fitur di facebook yang memberitahukan jarak waktu status tersebut dibuat dengan waktu sekarang. Waktu yang diinputkan, saya konversikan dulu ke bentuk integer dengan perintah strtotime(). Kemudian dibagi variabel array waktu, yang di dalamnya terdapat nilai untuk menentukan apakah itu tahun, bulan, hari dan sebagainya.

Cara penggunaannya juga sederhana, yaitu dengan memanggil nama helper dan memanggil nama-nama function di atas. Jangan lupa untuk memasukkan parameternya.

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Tanggal extends CI_Controller {

	function __construct()
	{
		parent::__construct();
		$this->load->helper('tgl_indonesia');
	}

	function index()
	{
		echo nama_hari('2010-11-23').' '. tgl_indo('2010-11-23');
		echo "<br>";
		echo hitung_mundur(strtotime('2010-11-23'));
	}
}

outputnya akan terlihat seperti berikut :

Selasa 23 November 2010
1 tahun 7 bulan 1 hari 23 jam 26 menit yang lalu

Wah, setelah dihitung-hitung saya baru sadar, ternyata lama juga saya menjomblo ;). Function hitung_mundur() sebenarnya sangat sederhana sekali, mirip dengan tugas algoritma & pemrograman di semester 1 saya dulu, dimana pak dosen menugaskan untuk mencari berapa jam, menit dan detik dari inputan waktu yang dimasukkan. Cuma untuk kasus yang kali ini, ditambah menjadi berapa tahun, bulan, minggu dan hari. OK deh, semoga sedikit trik sederhana ini bisa bermanfaat untuk kita semua.

Happy Blogging and Keep Coding

Cheerrrss….!!!!

6 comments

  1. Achmad Hadi Kurnia Reply

    Gan ko ada pesan error Unable to load the requested file: helpers/tgl_indonesia_helper.php

    mohon pencerahan

  2. Achmad Hadi Kurnia Reply

    Sudah bisa gan. ternyata nama file helpernya harus memenuhi format penamaan helper namafilehelper_helper.php

  3. Fêrdhîkâ Yûdîrâ Reply

    oh iya bang kenapa ya pas tanggalnya ambil dari database muncul error
    type datanya pake timestampt terus saya potong..
    kodingnya :

    nama_hari(substr($eusi[‘tanggal’], 0,-8))

    muncul errornya seperti ini :

    A PHP Error was encountered

    Severity: Notice

    Message: A non well formed numeric value encountered

    Filename: helpers/tgl_indonesia_helper.php

    Line Number: 72

    mohon di bantu ya gan.. 😀

  4. Arif Weu Reply

    terima kasih atas ilmunya sangat membantu sekali. tapi saya ingin bertanya, bagaimana cara merubah tampilan format tanggalnya.

    karena format tanggal yang muncul seperti ini : 28-11-15
    saya ingin merubah tampilanya biar jadi seperti ini :28 November 2015

    bagaiman script ya ???
    Mohon bantuannya..terima kasih