Date dan Time adalah sebuah "mahluk" yang tidak dapat dipisahkan dalam kehidupan kita. Katanya bila bisa me-manage waktu dengan baik maka akan lebih dekat dengan kesuksesan.
Dalam pemrograman komputer persoalan Date dan Time di banyak aplikasi selalu terjadi, dari menampilkan format tanggal hingga operasi-operasi yang melibatkan Date & Time.
Dari beragam fitur yang dimiliki Database MySQL, diantaranya adalah fitur untuk Untuk melakukan manipulasi Time dan Date yaitu DATEDIFF, TIMEDIFF, TIME_TO_SEC. Fungsi-fungsi tersebut dapat mempermudah dan mempercepat dalam mengelolah hal-hal yang berhubungan dengan Time & Date.
Berikut ini adalah beberapa kegunaan dari memanfaatkan fitur Time & Date yang dimiliki Database MySQL.
Database MySQL yang saya gunakan versi 5.1 dengan Operation System Ubuntu 11.04 - the Natty Narwhal
A. Menghitung Keterlambatan Hari
Menghitung keterlambatan hari Biasanya di implemetasikan di persoalan-persoalan yang berhubungan dengan peminjaman, seperti perpustakaan dan rental film.
Misalkan saya memiliki data peminjam sebagai berikut. Kemudian saya ingin menghitung keterlambatan pengembalian buku.
Berikut ini adalah cara untuk menghitung keterlambatan hari
SELECT id_pegawai, id_buku, DATEDIFF(NOW(),tgl_batas_pinjam) AS keterlambatan FROM peminjaman;
Penjelasan
- DATEDIFF = Fungsi untuk menghitung selisih tanggal
B. Menghitung Usia
Misalkan saya memiliki data karyawan sebagai berikut. Kemudian saya ingin menghitung umur setiap karyawan.
Berikut ini adalah cara untuk menghitung usia.
SELECT nama_depan, tgl_lahir, ((YEAR(NOW()) - YEAR(tgl_lahir))) - (RIGHT(NOW(),5) < RIGHT(DATE(tgl_lahir),5)) AS usia FROM pegawai;
Penjelasan Fungsi MySQL
- NOW = Fungsi untuk menampilkan tanggal sekarang
- YEAR = Fungsi untuk mengambil tahun dari sebuah tanggal
- RIGTH = Fungsi untuk mengambil karakter dari sebelah kanan
C. Menghitung Jam Kerja
Menghitung jam kerja dapat di manfaatkan untuk menghitung jam kerja karyawan di hari yang berjalan atau untuk menghitung akumulasi jam kerja yang telah berlalu.
Misalakan saya memiliki table absensi pegawai seperti dibawah ini. Kemudian saya memerlukan data tentang jumlah jam kerja berjalan pegawai dan jumlah total jam kerja pegawai.
Menampilkan Jumlah Jam Kerja dihari berjalan
SELECT id_pegawai, (TIMEDIFF(jam_keluar,jam_masuk)) as jam_kerja FROM absen;
Menampilkan Jumlah Total Jam Kerja karyawan
SELECT id_pegawai, SEC_TO_TIME(SUM((TIME_TO_SEC(TIMEDIFF(jam_keluar,jam_masuk))))) as jam_kerja FROM absen GROUP BY id_pegawai;
Penjelasan Fungsi MySQL
- TIMEDIFF = Fungsi untuk membandingkan jam
- TIME_TO_SEC = Fungsi untuk merubah jam menjadi detik
- SUM = FUNGSI untuk menjumlahkan
- SEC_TO_TIME = Fungsi untuk merubah detik menjadi jam
thanks berat gan.... saya nyari script total jam kerja.... akhirnya ketemu juga...
ReplyDeleteyup.. gan
ReplyDeletegan mau tanya lagi donk.
ReplyDeletemengenai fungsi enable disable.
kalau kasusnya seperti ini gimana :
saya punya web absensi, dan ingin menggunakan fungsi disable berdasarkan hari.
misal : jika sekarang tanggal 25 agustus 2011 saya tidak mengisi form absen, maka besok tanggal 26 agustus yang tanggal 25 agustus tidak bisa di isi pada tanggal 26 agustus (disable). scriptnya kira2 gimana yah gan ?
This comment has been removed by the author.
DeleteThis comment has been removed by the author.
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteBiasanya dilakukan validasi tanggal dilevel aplikasi sebelum di input ke database.
ReplyDeleteBerikut ini contoh validasi tanggal menggunakan store procedure mysql.
1. Membuat store procedure insert tabel absensi untuk berikut validasi tanggalnya.
CREATE PROCEDURE `sp_absen_add`(nik char(10),tanggal char(10),status varchar(255))
BEGIN
declare tglSkrg varchar(10);
declare status int;
select date_format(now(),'%Y-%m-%d') into tglSkrg;
if (tanggal = tglSkrg) then
/*letakan query untuk insert absen*/
set status = 1;
end if;
END
2. Panggil store procedure tersebut seperti contoh dibawah ini.
sp_absen_add('200704001','2011-08-26','ADD')
rada sedikit bingung juga yah... berikut screen shoot gambarnya gan..
ReplyDeletehttp://www.diskusiweb.com/discussion/41021/fungsi-tanggal-disable
saya sih inginya seperti kasus ini.. itu saya juga yang post..
jadi pada saat tanggal di pilih karena sudah lewat kolom isian menjadi disable.
ato boleh gak gan buatkan web sederhana nya saja seperti contoh di atas.. biar saya bisa pelajari... saya udah bookmark nih web mantap..hehehe... tolong yah gan...
oh klw yang seperti itu persoalannya pada validasi tanggal di level javascript.
ReplyDeleteTapi aku mau kasih solusi yang cukup simple untuk masalah mu.. apabila menggunakan php gunakan validasi tanggal seperti di bawah ini.
$exp_date = "2006-01-16";
$todays_date = date("Y-m-d");
$today = strtotime($todays_date);
$expiration_date = strtotime($exp_date);
if ($expiration_date > $today) {
$valid = "yes";
} else {
$valid = "no";
}
sumber : http://www.highlystructured.com/comparing_dates_php.html
gan mu tanya lagi kalau menjumlahkan jam perhari gimana yah ?
ReplyDeletekalau kemarin kan saya jumlahkanya per keseluruhan.
nah kalau perhari scriptnya gimana yah gan ?
misal hari ini saya kerja 8 jam, kemarin saya kerja 8 jam. itu gimana yah gan cara menampilkanya...
SQL nya begini.
ReplyDeleteSELECT id_pegawai,tanggal, SEC_TO_TIME(SUM((TIME_TO_SEC(TIMEDIFF(jam_keluar,jam_masuk))))) as jam_kerja FROM absen group by id_pegawai,tanggal
hatur nuhun + thankyou gan.... akhirnya bisa juga...
ReplyDeletenanti saya tanya tanya lagi gan..hehe.. punya guru baru..
bang minta pencerahanya ....
ReplyDeletekalo ingin menampilkan ulang tahun kita dari tanggal kelahiran kita secara detail gimana ...
bukan cuma umurnya saja ..tapi juga dari hari bulan n tahun tepat kita Ultah gmn baaang ..
Please help mee ...
This comment has been removed by the author.
ReplyDeleteThis comment has been removed by the author.
ReplyDelete@anonim. coba ini untuk menampilkan ultah yang isinya hari, tgl, bulan dan tahun.
ReplyDeleteselect date_format('2011-10-23','%W %d %M %Y') as tgl_lahir;
+-----------------------------------------+
| tgl_lahir |
+-----------------------------------------+
| Sunday 23 October 2011 |
+-----------------------------------------+
Kalau diimplementasikan dalam sebuah tabel yang berisikan profile member akan seperti ini.
select if(date_format(now(),'%Y-%m-%d') = date_format(tgl_lahir,'%Y-%m-%d'), date_format('2011-10-23','%W %d %M %Y'),null);
Gan , kalo mw nampilin data karyawan yang bekerja sudah lebih dari 1 tahun gmna ya ?
ReplyDelete@anonim cara menampilkan karyawan yang lebih dari 1 tahun bisa seperti ini
ReplyDeleteselect * from karyawan where date_format(tgl_masuk,'%j') > 365
gan mw tnya?? klo mengitung umur berdasarkan jumlah bulan gmn scriptx??
ReplyDelete@anonim.. caranya begini
ReplyDeleteSELECT FLOOR(30/12);
Ket:
30 = Jumlah Bulan
12 = Jumlah bulan dalam satu tahun
Floor = Function untuk membulatkan bilangan
mas, saya mau tanya,
ReplyDeletekalo update otomatis fild database berdasarkn tanggal di bios laptop kita bisa nggak?
setau saya belum bisa mas
Deletemas saya ikutan tanya.
ReplyDeletekalau mau hitung usia.
misal:
22 tahun 9bulan 20hari
mas gmn caranya membandingkan jam??
ReplyDeletemisal:
jam1 : 10:00:00
jam2 : 12:00:00
kedua jam tsb ketika dibandingkan hasilnya jam1 lebih dulu dulu dibanding jam2 ato sebaliknya...
makasi kk..
This comment has been removed by the author.
DeleteApakah maksudnya membandingkan dua buah waktu untuk mendapatka selisihnya ?, berikut ini adalah contohnya.
Deletemysql> SELECT TIMEDIFF('10:00:00','12:00:00');
+---------------------------------+
| TIMEDIFF('10:00:00','12:00:00') |
+---------------------------------+
| -02:00:00 |
+---------------------------------+
1 row in set (0.09 sec)
mysql> SELECT TIMEDIFF('12:00:00','10:00:00');
+---------------------------------+
| TIMEDIFF('12:00:00','10:00:00') |
+---------------------------------+
| 02:00:00 |
+---------------------------------+
1 row in set (0.00 sec)
gan cara menghitung keterlambatan hari pada tanggal dengan format varchar gimana??cz punya ane tanggalnya format varchar
ReplyDeletemas klo saya ingin tampilkan seluruh tanggal (misal : dari tgl 2012-11-01 s/d 2012-11-30) semua tanggal tampil, tanpa harus yg ada di database bgmn yah?
ReplyDeleteMaksud "tanpa harus yg ada di database bgmn yah?" gimana ya ?
Deletemas misalkan mau menampilkan data yang ada khusus untuk tanggal hari ini saja bagaimana mas???
ReplyDeleteCaranya adalah :
Deleteselect * from where date_format(tanggal,'%d-m%-%Y') = date_format(now(),'%d-m%-%Y');
saya pake MySql 5.1.30 kok gak bisa ya mas error nya di sql syntax-nya
ReplyDeleteralat mas saya cma lupa tanda koma saja ,, hpus saja komennya :D
DeleteAlhamdulilah,kalau sudah dapat solusinya
DeleteThis comment has been removed by the author.
ReplyDeleteikutan nimbrung mas... Gimana agar record tidak ikut berubah ketika file master yang berhubungan diganti? Misal semula Denda telat Perpus 500, hari ini diganti 1000, gimana agar hari yang telah lalu tidak ikut2an ganti 1000 ? matur nuwun ...
ReplyDeleteKalau menurut saya kalau tentang denda di perpusatakan, maka di tabel yang menyimpan jumlah denda buku adalah bukan id table master denda tetapi nilai dari denda dari table master
Deletemisalnya di database saya pnya tanggal a=2013-03-28 dan b=2013-03-30, nah sya mau menampilkan seluruh tanggal yang ada dalam range tersebut, caranya gimana y mas??
ReplyDeletemiisalny hasil ny seperti ini :
2013-03-28
2013-03-29
2013-03-30
saya mau numpang tanya mas..
ReplyDeletekalo misal untuk mengubah dari format time ke double bisa ga?
makasi
baagus ini mas dendie postingnya.....
ReplyDeletenanya nih mas...,
misalnya saya punya sebuah tabel yang berisi 3 field(kolom) dimana terdiri dari
||tglawal || tglakhir || selisihtgl ||
maksud saya adalah jika dimasukkan tgl pada field tglawal dan tglakhir maka selisihtgl otomatis akan terisi jumlah dari hitungan keduanya(satuanyya adalah hari )
gmn mas ? mohon pencerahannya?
Apabila menghitung selisih tanggal nya inggin di MYSQL maka di perlukan 2 kali eksekusi query.
Delete1. Query pertama insert tglawal dan tanggal akhir.
2. Query kedua updae field selisihtgl.
mohon maaf gan...sebelumnya....contohnya seperti apa ya gan..?
Deletesaya masih bingung dengan yang agan jelasin...terima kasih sudah respon saya
gan mau nanya kalo cara nampilin usia dari tanggal lahir yang umurnya hanya dari 20-30 gmn?
ReplyDeletemakasih sebelumnya..
trims mas waktunya..
ReplyDeletepertanyaanku tentang tglawal||tglakhir||selisihtgl
sudah dijelasin...setahuku mas kalo yang dipake sql server 2005 ke atas itu sudah ada hitungan selisihtgl dngan menggunakan klausa AS bla..bla..
ini ane mau tanya lagi :
kasusnya gini gan...misalnya ada tabel yang memiliki 2 field ..
field pertama : idfilm
field kedua : judulfilm
yg tak tanyain gmn gan agar 1 buah idfilm bisa memiliki lebih dari satu judulfilm dengan kata lain bagaimana agar sebuah primary key , kolom disampingnya bisa memiliki atribut row lebih dari satu baris?
Bagus banget nih Mas Dendie, ane lagi nyari script tentang menghitung umur dan nampilin di report.
ReplyDeleteThanks Mas Dendie
maaf, mau tanya, gmn script-nya klo mau nyari tanggal, bualan, hari, yang diambil dari tabel RS15 dan RS23???
ReplyDeleteterima kasih sebelumnya...^_^
maaf mas saya mau nanya, bagaimana jika menghitung jumlah pegawai yang absen masuknya telat? batas waktu absen jam 09:45. jadi jika pegawai telat langsung di potong gaji. gimana ya mas solusinya?
ReplyDeleteterima kasih.
hgkyttghgjllllllllll;;;;;;y6786ytfghfluyytyti75675ytruytryue
ReplyDeletebagaimana cara menghitung jumlah karyawan yang datang di atas jam 21.00 dan di bawah 08.00
ReplyDeleteBro.. maap ganggu.
ReplyDeleteane udah query kya di bawah.
SEC_TO_TIME(SUM(TIME_TO_SEC(timediff(tqueue.waktu_dipanggil , tqueue.waktu_ambil_tiket) ) ) ) as total_waktu.
hasil nya 267:14:49 ratusan jam.
kalo ane masukin di Ireport kan ga masuk tuh.
ada cara nya ga query ane itu jadi TIMESTAMP atau DATETIME
gan mau nanya klw mau nyari selisih tanggal terus selisihnya kita jadi kan validasi gimana yach?
ReplyDeletesaya pnya kasus pada aplikasi asuransi jika nasabah melakukan pembayaran lewat dari tnggl janji bayar (account status promise to pay) maka account status berubah mnjadi broken promise
gimana ya gan mohon solusinya...
Keren mas....
ReplyDeletemau nnya gan..
ReplyDeletesintak untk nampilin umur tpi seperti : tahun, bulan, hari
gmna dia gan???
mohon bantuannya....
sorry gan klo cara nya agar banyak dendaan otomatis berdasar kan keterlambatan gimana..?
ReplyDeleteini dia salah satu fingsi yang bakal sering saya pakai
ReplyDeletegassss gannn
ReplyDeletefungsi ini sama gak buat di sql server?
ReplyDeleteIni penjelasan yang saya cari, dilihat dari komennya juga sangat membantu
ReplyDeletegan klo fungsi tersebut selisihnya di simpan dalam database mysql gmn? misal $carikontrak = "SELECT *,current_date(mulai_masuk)AS mulai_kontrak, DATEDIFF(tgl_akhir_kontrak, mulai_kontrak)AS habis_kontrak FROM t_karyawan";
ReplyDelete$selisih=$this->db->query($carikontrak);
nah kira2 yang ($selisih) saya insert ke rows table, jadi buka menggunakan select. gmn ya gan? tolong dong agan2 master php dan framework?
Sy mau buat tanggal masehi jadi hijriyah, lalu dalam tanggal hijriyah sekarang misal: 1 syawal 1437, maka 1 syawal 1438 tahun masehinya jadi tanggal berapa?
ReplyDeletePerintah mysqlnya bgmn??
Sy mau buat tanggal masehi jadi hijriyah, lalu dalam tanggal hijriyah sekarang misal: 1 syawal 1437, maka 1 syawal 1438 tahun masehinya jadi tanggal berapa?
ReplyDeletePerintah mysqlnya bgmn??
Assalamualaikum....
ReplyDeleteGan z mw tx bagaimana menampilkan kalau sudah saatnya pensiun..., misalnya batas tanggal pensiun umur 65 tahun...., dan hasilnya itu akan muncul secara otomatis....
Makasih gan.....
menghitung selisih jam 23:54:08 malam dan jam 01:00:55 malam gmana?? klau pake TIMEDIFF kan hasilnya 22:53:13
ReplyDeletesorry gan mau tanya
ReplyDeletekalo mau cari denda keterlambatan kan tinggal yang "DATEDIFF(NOW(),tgl_batas_pinjam)" dikali jumlah denda. tapi masalahnya hasilnya akan negatif kalo telat dan kalo belum telat hasilnya bukan 0.. nah untuk membuat hasilnya menjadi 0 kalo belum telat gimana ya?? hehe makasih
gan, ijin tanya tentang presensi. jika karyawan melakukan presensi jam 8.15 am, sedangkan jam masuk kerja jam 8.00, nah untuk menampilkan waktu 15 menit itu gmn ya gan ?
ReplyDeletesaya menggunakan codeigniter gan.
Deletehallo gan, ijin bertanya untuk menghitung dendanya bagaimana? misal lebih dari tgl_pinjam secara auto di dikalikan dgn perhari
ReplyDeleteBagaimana menghitung denda perpustakaan
ReplyDeleteThis comment has been removed by the author.
ReplyDelete