Pengolahan Waktu di PHP

Di artikel ini kita akan mencoba mengetahui salah satu fungsi di php yaitu date dan mktime, yg sangat berguna untuk pengolahan waktu seperti, validasi, perbandingan,pengurangan dan penambahan. Pengolahan waktu sangatlah penting jika aplikasi kamu berhubungan dgn validasi dan perbandingan waktu, misal: masa berlaku keanggotaan, memberi peringatan jika masa berlaku akan habis sebentar lagi, aplikasi kalender, dan banyak lagi.

jika kita membaca manual dari php, dapat dijelaskan sbb:

date

syntak: int date (string format, int [timestamp])
fungsi: menghasilkan waktu sesuai dengan format waktu yg diberikan
contoh(diasumsikan saat ini tgl 24 februari 2002):
$sekarang = date(“d-m-Y”); /*akan menghasilkan 24-02-2002*/
$sekarang = date(“j F Y”); /*akan menghasilkan 24 February 2002*/

d akan memformat tanggal dgn dua dua digit mulai 01 sampai 12
m akan memformat bulan dgn dua digit mulai 01 sampai 30
Y akan memformat tahun dgn empat digit misal. 1999,2002,dsb
j akan memformat tanggal dgn menghilangkan angka 0 didepan mulai 1 sampai 31
n akan memformat bulan dgn menghilangkan angka 0 didepan mulai 1 sampai 12
F akan memfromat bulan dgn tekstual lengkap misal. March, December,dsb

Masih banyak lagi parameter waktu yg bisa digunakan, sebaiknya kamu membaca manual dari php untuk mengetahui secara lengkap parameter lainnya

mktime

syntak: int mktime (int hour, int minute, int second, int month, int day, int year [, int is_dst])
fungsi: untuk mendapatkan format waktu UNIX dlm detik (long integer) terhitung mulai dari 1 januari 1970
contoh:
$sekarang = mktime(0,0,0,date(“m”),date(“d”),date(“Y”)); /* akan menghasilkan 1014483600*/
$waktu = mktime(0,0,0,11,22,98); /*akan menghasilkan 911667600*/
$waktu = date(“j F Y”, mktime(0,0,0,7,9,2002)); /*akan menghasilkan 9 July 2002*/

Kesalahan yg bisa dibenarkan

salah satu kelebihan fungsi mktime adalah mampu mengkoreksi kesalahan format waktu yang kita tulis. misal:


$waktu = date(“j F Y”, mktime(0,0,0,7,34,2001));
$waktu = date(“j F Y”, mktime(0,0,0,13,2,2001));

Penulisan variabel pertama diatas adalah sah saja, karena nilai 34 (tidak ada tanggal 34) otomatis akan dirubah menjadi tgl 31 ditambah 3 sehingga menghasilkan 3 August 2001. begitu juga pada variabel kedua akan menghasilkan 2 Janury 2002 (tidak ada bulan 13 maka otomatis dirubah menjadi 12 ditambah 1 bulan kedepan)

Sekarang kita akan mencoba memanfaatkan kedua fungsi tersebut untuk membantu kita dlm pengolahan waktu. pembahasan artikel ini hanya mencakup pemanfaatan format tanggal, bulan dan tahun saja dan menghiraukan format jam, menit dan detik sehingga kita cukup mengisi jam, menit dan detik dengan 0. Anda bisa mencoba sendiri bereksperimen dgn format waktu lainnya.

Contoh 01. penambahan dan pengurangan waktu

jika kita ingin mengetahui waktu pd saat 3 hari yg akan datang (andaikan hari ini tgl 10 Oktober 2001), dengan mudah kita bisa menuliskannya sbb:


$tambahwaktu = date(“d F Y”, mktime(0,0,0,date(“m”),date(“d”)+3,date(“Y”))); /*menghasilkan 27 February 2002*/
echo (“tiga hari yg akan datang jatuh pada tgl $tambahwaktu”);

perhatikan penambahan 3 di bagian date(“d”) yg dimaksudkan untuk menambahkan interval 3 hari ke depan. jika kita ingin mengetahui interval bulan, maka cukup menambahkannya pada bagian date(“m”) dan yg lainnya dgn prinsip yg sama. contoh lain:


$kurangtanggal = date(“d F Y”, mktime(0,0,0,date(“m”),date(“d”)-14,date(“Y”))); /*menghasilkan 10 February 2002*/
echo (“dua minggu yg lalu jatuh pada tgl $kurangtanggal”);

$kurangbulan = date(“d F Y”, mktime(0,0,0,date(“m”)-7,date(“d”),date(“Y”))); /*menghasilkan 24 July 2001*/
echo (“tujuh bulan yg lalu jatuh pada tgl $kurangbulan”);

Contoh02. validasi waktu dari masukan form.

Sekarang kita akan mencoba langsung pemanfaatan fungsi date dan mktime dalam sebuah form html dengan membandingkan dua buah waktu sesuai kondisi yang kita inginkan. Diasumsikan bahwa kamu sudah mengetahui penulisan form pada html. Dlm contoh ini kita akan membuat bagian dari sebuah proses reservasi dimana user memilih tanggal checkin dan checkout dengan kondisi sbb:
1. minimal selisih tanggal checkin adalah 3 hari setelah waktu saat ini
2. jarak antara checkin dan checkout minimal 2 hari, dgn kata lain; reservasi minimal 2 hari
3. form secara default akan menampilkan waktu 3 hari setelah waktu saat ini pd checkin dan selisih dua hari dari checkin, pada form checkout

yg akan kita lakukan adalah membuat form waktu checkin dan checkout yg nantinya akan dipilih user. kemudian field-field tersebut secara default (menggunakan atribut “selected” pada tag ) akan menampilkan penambahan 3 hari setelah waktu saat ini di field checkin, dan field checkout yang berselisih 2 hari dgn waktu checkin.

pertama, kita akan membuat sebuah file, kita beri nama tanggal.php yg berisikan form yg akan diproses oleh sebuah file yg bernama validasi.php (comment diantara /* dan */), sbb:

PLAIN TEXT

PHP:

  1. <?php
  2. /* tanggal.php */
  3. /* buat array bulan */
  4. $bulan = array(1=>‘Jan’,2=>‘Feb’,3=>‘Mar’,4=>‘Apr’,5=>‘May’,6=>‘Jun’,7=>‘Jul’,8=>‘Aug’,9=>‘Sep’,10=>‘Oct’,11=>‘Nov’,12=>‘Dec’);
  5. /* definisikan variabel-variabel tgl, bulan dan tahun utk dipakai sbg pembanding pd tag option */
  6. $checkin = mktime(0,0,0,date(“m”) ,date(“d”)+3,date(“Y”));
  7. $indate = date(“j”, $checkin);
  8. $inmonth = date(“n”, $checkin);
  9. $inyear = date(“Y”, $checkin);
  10. $checkout = mktime(0,0,0,date(“m”) ,date(“d”)+5,date(“Y”));
  11. $outdate = date(“j”, $checkout);
  12. $outmonth = date(“n”, $checkout);
  13. $outyear = date(“Y”, $checkout);
  14. ?>
  15. <html>
  16. <body>
  17. <form method=“post” action=“validasi.php”>
  18. <p>check-in:
  19. <select name=“intanggal”>
  20. <?php
  21. /* buat loop utk tgl sampe batasnya. yg lain juga sama */
  22. for ($i=1; $i <= 31; $i++) {
  23. /* jika $indate sama dgn $i, maka buat terselect secara default pd tag select. yg lain juga sama */
  24. if ($i == $indate){ $selectdate =“selected”;} else {$selectdate=“”;}
  25. echo (“<option value=\”$i\” $selectdate>$i</option>”.\n);
  26. }
  27. ?>
  28. </select>
  29. <select name=“inbulan”>
  30. <?php
  31. for ($i=1; $i <= 12; $i++) {
  32. if ($i == $inmonth){ $selectmonth =“selected”;} else {$selectmonth=“”;}
  33. echo (“<option value=\”$i\” $selectmonth>$bulan[$i]</option>”.\n);
  34. }
  35. ?>
  36. </select>
  37. <select name=“intahun”>
  38. <?php
  39. for ($i=2002; $i <= 2003; $i++) {
  40. if ($i == $inyear){ $selectyear =“selected”;} else {$selectyear=“”;}
  41. echo (“<option value=\”$i\” $selectyear>$i</option>”.\n);
  42. }
  43. ?>
  44. </select>
  45. </p>
  46. <p>check-out:
  47. <select name=“outtanggal”>
  48. <?php
  49. for ($i=1; $i <= 31; $i++) {
  50. if ($i == $outdate){ $selectdate =“selected”;} else {$selectdate=“”;}
  51. echo (“<option value=\”$i\” $selectdate>$i</option>”.\n);
  52. }
  53. ?>
  54. </select>
  55. <select name=“outbulan”>
  56. <?php
  57. for ($i=1; $i <= 12; $i++) {
  58. if ($i == $outmonth){ $selectmonth =“selected”;} else {$selectmonth=“”;}
  59. echo (“<option value=\”$i\” $selectmonth>$bulan[$i]</option>”.\n);
  60. }
  61. ?>
  62. </select>
  63. <select name=“outtahun”>
  64. <?php
  65. for ($i=2002; $i <= 2003; $i++) {
  66. if ($i == $outyear){ $selectyear =“selected”;} else {$selectyear=“”;}
  67. echo (“<option value=\”$i\” $selectyear>$i</option>”.\n);
  68. }
  69. ?>
  70. </select>
  71. </p>
  72. <p>
  73. <input type=“submit” value=“cek waktu”>
  74. </p>
  75. </form>
  76. </body>
  77. </html>

Mari kita perhatikan satu-persatu,
$bulan berisi array utk mempopulasi option bulan di form. Jika kamu belum memahami array, silahkan mambaca manual php. Untuk saat ini kita tidak akan membahasnya.

$checkin akan menghasilkan format waktu 3 hari setelah saat ini, yg kemudian diambil tanggalnya saja pada variabel $indate. $indate sendiri akan memformat waktu berdasarkan format dua digit tanpa 0 didepan, sesuai dgn value yg kita punya di option tanggal. begitu juga dengan $inmonth dan $inyear yg mengambil format bulan dua digit dan format tahun empat digit.

bisa saja kita mendapatkan hasil dgn nilai yg sama dgn hanya menggunakan fungsi date. seperti pada cara kedua sbb:


$indate = date(“d”)+3;

namun apabila kita menambahkannya dgn 35, maka format tanggal diatas menjadi tidak sah lagi, lain halnya dgn mktime yg otomatis memperbaiki kesalahan. dgn pertimbangan fleksibilitas serta mengurangi resiko kesalahan maka kita akan menggunakan cara pertama walaupun lebih panjang dari cara kedua.

sekarang, perhatikan code-snippet sbb:

PLAIN TEXT

PHP:

  1. <select name=“intanggal”>
  2. <?php
  3. /* buat loop utk tgl sampe batasnya. yg lain juga sama */
  4. for ($i=1; $i <= 31; $i++) {
  5. /* jika $indate sama dgn $i, maka buat terselect secara default pd tag select. yg lain juga sama */
  6. if ($i == $indate){ $selectdate =“selected”;} else {$selectdate=“”;}
  7. echo (“<option value=\”$i\” $selectdate>$i</option>”.\n);
  8. }
  9. ?>
  10. </select>

pada option tanggal kita akan membuat loop sampai batas 31


for ($i=1; $i <= 31; $i++) {

artinya selama $i lebih kecil atau sama dengan 31, maka $i akan ditambahkan dgn 1 dgn penulisan $i++

sebelum output kita keluarkan, kita juga men-cek, jika nilai $indate sama dgn $i maka $selectdate berisi string “selected” jika tidak nilai $selectdate kita buat kosong “”


if ($i == $indate){ $selectdate =”selected”;} else {$selectdate=””;}

kemudian terakhir, kita mempopulasi tag yg otomatis terselect. prinsip ini sama dengan loop utk bulan dan tahun. Perhatikan juga pada option inbulan dimana kita mengoutput array $bulan yg telah kita buat sebelumnya.

Untuk option inbulan, sebenarnya kita juga bisa mempopulasi array bulan yg telah kita buat dengan cara sbb:


while(list($key,$val)=each($bulan)) {
if ($key == $inmonth){ $selectmonth =”selected”;} else {$selectmonth=””;}
echo (“$val”.”\n”);
}

penulisan cara diatas ataupun cara sebelumnya sama saja, terserah kamu memilih yang mana.

Kini saatnya kita membuat file validasi.php,

PLAIN TEXT

PHP:

  1. <html>
  2. <body>
  3. <?php
  4. /*validasi.php*/
  5. $in = mktime(0,0,0,$inbulan,$intanggal,$intahun);
  6. $out = mktime(0,0,0,$outbulan,$outtanggal,$outtahun);
  7. $min = mktime(0,0,0,date(“m”),date(“d”)+3,date(“Y”));
  8. $interval = mktime(0,0,0,$inbulan,$intanggal+2,$intahun);
  9. $nowshow = date(“j F Y”);
  10. $minshow = date(“j F Y”, $min);
  11. if ($in <$min) {
  12. echo (“hari ini tgl $nowshow, dan waktu checkin minimum adalah tgl $minshow, silahkan kembali”);
  13. }
  14. elseif ($in>= $out) {
  15. echo (“waktu checkin tidak boleh sama dengan atau lebih dari tgl checkout, silahkan kembali”);
  16. }
  17. elseif ($interval> $out) {
  18. echo (“jarak antara checkin dan checkout minimum 2 hari, silahkan kembali”);
  19. }
  20. else {
  21. echo (“terimakasih, kami akan memprosesnya!”);
  22. }
  23. ?>
  24. </body>
  25. </html>

Mari kita perhatikan satu persatu,
$in dan $out akan mendapatkan format waktu berdasarkan masukan user pd field checkin dan checkout.
$min adalah pembanding untuk mendapatkan nilai 3 hari setelah saat ini.
$interval akan berfungsi sbg pembanding selisih minimum 2 hari antara checkin dan checkout.
$nowshow memformat waktu sekarang dan $minshow memformat minimum waktu checkin.

setelah kita mendapatkan nilai-nilai yg diperlukan maka dgn mudah kita dapat membandingkannya sesuai dgn kondisi yg kita inginkan seperti contoh-contoh diatas. cobalah untuk men-tes script yg telah kamu buat tersebut, dan lakukan experimen lainnya misalnya membandingkan jam, menit atau detik.

contoh diatas masih sangat sederhana dan belum sempurna, seperti misal: belum ada validasi untuk tanggal di tahun kabisat. Untuk itu, kamu bisa menambahkan validasi berdasarkan tahun kabisat dengan melihat input form tahun yg jika habis dibagi 4 berarti tahun kabisat dan menggunakan parameter L di fungsi date() yang mengeluarkan nilai boolean. Atau validasi utk tgl di bln februari, dimana tidak ada tgl 30 di bulan februari.

Tagged:

18 thoughts on “Pengolahan Waktu di PHP

  1. berbagipikiran 4 November 2008 pukul 12:18 pm

    wah, makasih banyak penjelasannya. tapi sayang, saya butuh teknik pengolahan jam, menit, dan detik.

    oke, sekali lagi, terima kasih banyak…

  2. berbagipikiran 4 November 2008 pukul 12:21 pm

    eh, tampaknya mktime bisa buat ngitung jam menit dan detik juga ya??

    he he, maaf, saya masih cupu^^’

    saya coba deh. makasih lagi🙂

  3. eksa 4 November 2008 pukul 11:02 pm

    sama-sama mas, semoga bisa saling membantu. jangan sungkan-sungkan kl ada pertanyaan !!, kalo bisa saya jawab ya pasti saya jawab kalo ga ya saya cariin di google..hehe

  4. ogie 9 Oktober 2009 pukul 10:10 am

    Mas aku mau nanya ni, kalau menghitung denda pengembalian buku jika hari pengembaliannya ud lewat 2 hari, dan denda perharinya misalnya Rp 1000, untuk menghitungnya dengan php itu gimana yach??

  5. nina 19 Maret 2010 pukul 11:02 am

    waaaaaaaa…………
    terima kasih buanyak pak………..
    ngikut ngopy ya biar ndak hilang😀

  6. Salsabil 12 Mei 2010 pukul 10:53 am

    Mas aku mau nanya ni, kalau menghitung denda pengembalian buku jika hari pengembaliannya udah lewat, dan denda perharinya misalnya Rp 1000, untuk menghitungnya dengan php itu gimana yach?? Tolong kirim scriptnya lewat email darwiye@gmail.com
    Terimakasih atas perhatiannya..

  7. siswo 18 Juli 2010 pukul 5:38 pm

    Untuk menghitung denda yang lewat jatuh tempo pakai php tentu harus ditentukan jatuh tempo dulu, kemudian dihitung tanggal sekarang, kemudian jatuh tempo-tgl ketemu jumlah harinya baru dikalikan dendanya perhari. Tapi q sendiri blm bisa lho yach

  8. ahmad 22 Juli 2010 pukul 10:14 pm

    mas.. mau nanya nich,,, saya coba scriptnya tpi error kenapa yach di srcipt
    echo (“$i”.“\n“);

    saya lgi membuat reservsi kmar hotel jd harus ada batas wktu dri pemesanan tapi belum ketemu mas…
    tolong bntuin mas…
    makasih

  9. nuril 2 Agustus 2010 pukul 8:46 pm

    siippp,, tX sangat.🙂

  10. tok 1 September 2010 pukul 9:45 am

    ahh .. cuma copas

  11. hendra 6 Oktober 2010 pukul 1:48 am

    mas saya mau tanya,, klo bikin PHP tentang identitas:
    nama, alamat, tanggal lahir, umur(tanggal lahir-tanggal sekarang(menggunakan hitungan)), gmna ya mas cara membikinnya..????
    please bls secepatnya…

  12. wirawan 6 Desember 2010 pukul 6:25 am

    mas, saya mau tanya bagaimana untuk menghitung ketelambatan berapa hari dengan menggunakan mengurangan tanggal

  13. ayit 30 Mei 2011 pukul 11:58 am

    mau nanya, ada nggak fungsi buat ngecek apakah suatu type di PHP bertipe datetime yyyy-mm-dd hh-mm-ss? terima kasih sebelumnya.

  14. cahya 25 Juni 2011 pukul 8:00 pm

    mas..aq mu nanyak nih.. sintaknya buat hari sama jam dari php
    gimana sih sintaknya?????

  15. alfathony 4 Juli 2012 pukul 9:43 am

    mas, gimana kalo mau bikin validasi tanggal tidak boleh memasukan tanggal kemarin … terimakasih, semoga dibales

  16. danung 26 Juli 2012 pukul 7:39 pm

    mas sya coba tapi di line 27 g bisa error ja….
    apa nya ya mas, mhon bntuan nya, mksh….

  17. riska 30 April 2013 pukul 11:41 am

    saya mau tanya, kalau mau buat reminder untuk mengingatkan bahwa ada pelanggan yang memasuki masa tempo gimana ya??
    saya udah buat tapi gk muncul remindernya..

    remindr itu akan muncl sbelum batas akhir penyewaan barang, klau bisa kirim skriptnya ke email ini ya: riska.fitriani27@yahoo.com

    mkasih sbelumnya,,🙂

  18. rani suhartini 18 Juni 2014 pukul 8:49 am

    assalamualaikum , mass saya kan mau bikin contoh perhitungan algoritma , nahh saya bingung , harus di mulai yang mana dulu ,, dan saya pun bingung harus memakai syntak php yng mana ??
    jawab yaa🙂 makasi😉

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: