Mengoperasikan Tanggal Dengan PHP
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 … ^_^
Chandra Jatnika

weis keren puol.
membantu banget nie.
sekalian mraktekin OOP jg.
hahahaaaa
terima kasih, ini saya buat awalnya karena banyak teman nanya hal yg sama tentang operasi tanggal dll.
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.
Ini caranya..
semoga bisa membantu… ^_^
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
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.
mksh byk ya mas, isi web nya sangat membantu sy
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.
bagus sekali forumnya, okelah, kapan-kapan oe boleh nanya-nanya khan, buat ADMIN, siplah
la..lalla..la…la…la…la… senangnya hatiku… aakhirnya dpt juga apa yg ku mau…. thanks berad om….
. bookmark dolo..
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