Home > PHP, Snippets > Mengoperasikan Tanggal Dengan PHP

Mengoperasikan Tanggal Dengan PHP

September 6th, 2008 Leave a comment Go to comments

Pada pengoperasian sistem, peranan data tanggal sangat diperlukan. Pada sistem peminjaman barang, tanggal merupakan element penting karena dari data tanggal yang diinput kita bisa mengetahui berapa lama suatu item dipinjam member.
Akhir-akhir ini saya sering ditanyakan bagaimana cara mengetahui selisih tanggal, cara mendapatkan tanggal 2 hari yang akan datang, mendapatkan tanggal 30 hari yang akan datang dan lain-lain.

Oleh karena itu saya mencoba untuk memberi kemudahan untuk para rekan-rekan yang sering mengoperasikan tanggal di PHP dengan membuat class khusus yang berisi tentang pengoperasian tanggal dan method-method lain yang sering digunakan dalam sistem.


Berikut script class tersebut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?
	/*
		Class Name	: T10DateCalc
		Purpose		: Various Date Operation and Formating
		Author		: Chandra Jatnika  
		URL			: http://chandrajatnika.com
		Language	: Indonesian
	*/
	class T10DateCalc{
		var $_time; // akan menyimpan unix time dari tanggal yang anda masukkan
		var $_d; // akan menyimpan data Hari dari tanggal
		var $_m; // akan menyimpan data Bulan dari tanggal
		var $_y; // akan menyimpan data Tahun dari tanggal
		var $_h; // akan menyimpan data Jam dari tanggal
		var $_i; // akan menyimpan data Menit dari tanggal
		var $_s; // akan menyimpan data Detik dari tanggal
		// array di bawah untuk mendeskripsikan nama-nama bulan dalam bahasa indonesia
		var $_indoMonth = array('','Januari','Februari','Maret','April','Mei','Juni','Juli','Agustus','September','Oktober','November','Desember');
 
		/* Parameter pada konstruktor yang harus dimasukkan adalah sebuah tanggal 
		   dengan format 'Y-m-d' atau 'Y-m-d H:i:s'	*/
		function T10DateCalc($dateString){
			$this->_time = strtotime($dateString); // membuat unix tanggal dengan fungsi strtotime
			$this->_d = date('d',$this->_time); // ambil data Hari dari unix format
			$this->_m = date('m',$this->_time); // ambil data Bulan dari unix format
			$this->_y = date('Y',$this->_time); // ambil data Tahun dari unix format
			$this->_h = date('H',$this->_time); // ambil data Jam dari unix format
			$this->_i = date('i',$this->_time); // ambil data Menit dari unix format
			$this->_s = date('s',$this->_time); // ambil data Detik dari unix format
		}
 
		function getIndonesianFormat(){
			// akan mengembalikan nilai 05 September 2008 apabila anda memasukan format tanggal 2008-09-05
			return $this->_d .' '. $this->_indoMonth[date('n',$this->_time)] .' '. $this->_y;
		}
 
		function _getDate($intervalDay=0,$intervalMonth=0,$intervalYear=0){
			// fungsi yang akan mengembalikan nilai tanggal berdasarkan selisih hari, bulan dan tahun yang diinginkan
			if($this->_h == '00' && $this->_i == '00' && $this->_s == '00')
			 $formatDate = 'Y-m-d'; // apabila jam, menit dan detik tidak dimasukkan pada tanggal awal maka format tanggal yang dikembalikan adalah Y-m-d 
			else $formatDate = 'Y-m-d H:i:s';
			return date($formatDate,mktime($this->_h,$this->_i,$this->_s,$this->_m+$intervalMonth,$this->_d+$intervalDay,$this->_y+$intervalYear));
		}
 
		function nextDay($interval=1){ return $this->_getDate($interval); }	// mendapatkan tanggal hari selanjutnya dari tanggal awal yang anda masukkan	
		function previousDay($interval=1){ return $this->_getDate(-$interval); } // mendapatkan tanggal hari sebelumnya dari tanggal awal yang anda masukkan		
		function nextWeek(){ return $this->_getDate(7);	} // mendapatkan tanggal minggu selanjutnya dari tanggal awal yang anda masukkan
		function previousWeek(){ return $this->_getDate(-7); } // mendapatkan tanggal minggu sebelumnya dari tanggal awal yang anda masukkan		
		function nextMonth($interval=1){ return $this->_getDate(0,$interval); } // mendapatkan tanggal bulan selanjutnya dari tanggal awal yang anda masukkan
		function previousMonth($interval=1){ return $this->_getDate(0,-$interval); } // mendapatkan tanggal bulan sebelumnya dari tanggal awal yang anda masukkan
		function nextYear($interval=1){ return $this->_getDate(0,0,$interval); } // mendapatkan tanggal tahun selanjutnya dari tanggal awal yang anda masukkan
		function previousYear($interval=1){ return $this->_getDate(0,0,-$interval); } // mendapatkan tanggal tahun sebelumnya dari tanggal awal yang anda masukkan
 
		function compareDate($date2){
			// mendapatkan jumlah selisih dari tanggal yang anda masukan pada kontruktor awal dan tanggal yang anda masukkan pada parameter method ini
			$t = strtotime($date2);
			$gregorian1 = gregoriantojd($this->_m,$this->_d,$this->_y); // dapatkan format julian day dari tanggal awal
			$gregorian2 = gregoriantojd(date('m',$t),date('d',$t),date('Y',$t)); // dapatkan format julian day dari tanggal akhir
			$diff = $gregorian2 - $gregorian1;
 
			return $diff; // kembalikan hasil selisih tanggal
		}
 
	}
?>

Untuk cara pemakaiannya adalah seperti ini.

1
2
3
4
5
6
7
8
9
10
<?
	require "datecalc.class.php";
	$now = new T10DateCalc('2008-09-05');
	echo 'Date Format: '.$now->getIndonesianFormat().'<br>';
	echo 'Next 5 Day: '.$now->nextDay(5) . '<br>';
	echo 'Previous 5 Day: '.$now->previousDay(5) . '<br>';
	echo 'Next Week: '.$now->nextWeek() . '<br>';
	echo 'Last Week: '.$now->previousWeek() . '<br>';
	echo 'Compare With: '.$now->compareDate('2008-09-07') . ' day';
?>

Hasil dari script diatas adalah seperti ini:

Date Format: 05 September 2008
Next 5 Day: 2008-09-10
Previous 5 Day: 2008-08-31
Next Week: 2008-09-12
Last Week: 2008-08-29
Compare With: 2 day

Semoga dapat berguna dalam pekerjaan-pekerjaan anda … ^_^

Categories: PHP, Snippets Tags: , ,
  1. Q
    September 8th, 2008 at 13:19 | #1

    weis keren puol.
    membantu banget nie.
    sekalian mraktekin OOP jg.
    hahahaaaa

  2. September 11th, 2008 at 13:53 | #2

    terima kasih, ini saya buat awalnya karena banyak teman nanya hal yg sama tentang operasi tanggal dll.

  3. hanif
    January 19th, 2009 at 19:22 | #3

    mas, gimana skripnya bikin aplikasi misalnya seperti ini:
    Tanggal Pinjam : 19 Januari 2009 (Format tgl ini sesuai dg tgl dikomputer)
    Tanggal Kembali : 23 Januari 2009 (Tgl ini adlh format tgl dikomputer ditambah 4 hari).
    Gimana mas caranya? Please kasih tahu donk skrip php-nya. Pokoknya truimakasih banyak buat mas.

  4. January 19th, 2009 at 19:32 | #4

    Ini caranya..
    semoga bisa membantu… ^_^

     $now = new T10DateCalc(date('Y-m-d'));
     echo "Tanggal Sekarang:".$now->getIndonesianFormat();
     $next4day = new T10DateCalc($now->nextDay(4));
     echo "Tanggal Kembali:".$next4day->getIndonesianFormat();
  5. hanif
    January 20th, 2009 at 09:17 | #5

    trimakasih mas atas pencerahannya. maaf mas tanya lagi, begini mas, setelah skrip di atas saya jalankan, hasilnya seperti ini:
    Tanggal Sekarang:01 Januari 2009
    Tanggal Kembali:01 Januari 2009
    pertanyaan saya: kenapa ya mas koq ga muncul tanggal yang sekarang, malah muncul tanggal diatas: 01 Januari 2009. kesalahannya dimana?
    terimakasih atas pencerahannya ya mas. Btw, mulai sekarang boleh saya panggil mas dengan panggilan GURU? hehehehe. Soalnya mas pinter banget….. hehehehe

  6. January 20th, 2009 at 09:35 | #6

    ups sori kayaknya kesalahan ada di script utama (datecalc.class.php).
    untung mas ingetin…hehehe
    di baris ke-34 ada kesalahan kecil dimana “$this->_d” sebelumnya tertulis “$this->_m”
    maaf ya semua atas kesalahan ini.

  7. January 26th, 2009 at 18:28 | #7

    mksh byk ya mas, isi web nya sangat membantu sy

  8. hanif
    February 10th, 2009 at 14:17 | #8

    siang pak GURU, sebelumnya terima kasih ya atas yang kemarin, setelah saya coba ternyata bisa.
    sekarang tanya lagi boleh ya??? hehehe
    Gimana ya untuk memproteksi halaman web, biar ga bisa diakses, kecuali hanya melalui login saja. terima kasih ya pak GURU atas pencerahannya.

  9. saputradanang
    July 6th, 2009 at 12:19 | #9

    bagus sekali forumnya, okelah, kapan-kapan oe boleh nanya-nanya khan, buat ADMIN, siplah

  10. March 4th, 2010 at 15:25 | #10

    la..lalla..la…la…la…la… senangnya hatiku… aakhirnya dpt juga apa yg ku mau…. thanks berad om…. :D . bookmark dolo..

  11. March 4th, 2010 at 18:13 | #11

    oh ya mas,, saya tdi lupa tanya sekalian (saking senengnya). ini berlaku untuk tahun kabisat gak yah? trus 1 bulan dihitung secara konstan 30 hari atau tetap sesua tanggal yg semestinya.

    coz waktu itu saya bkin script tapi gagal, karena 1 bulan dihitung 30 hari (wlopun ada yg 31 hari). trus setiap bulan februari hanya di hitung sampe tanggal 28 saja.. terimakasih atas pencerahannya :)

  1. No trackbacks yet.