Untuk memberikan gambaran hasil akhir scriptnya, silakan buka http://rosihanari.net/countdown.php. Script countdown tersebut menampilkan hitungan mundur dalam satuan a hari, b jam, c menit, dan d detik menuju tahun baru 1 Januari 2011, pukul 00:00 WIB waktu server.
Mungkin Anda berpikir, mengapa menggunakan AJAX? ya… kelebihan AJAX adalah kita dapat menjalankan suatu script yang ada di server tanpa melakukan refresh via browser. Namun… kelemahan script AJAX adalah membutuhkan speed koneksi yang cukup lumayan cepat. Karena jika koneksinya lemot, akan terjadi delay.
OK… pertama kita akan membuat script untuk menampilkan atau menghitung waktu selisih antara waktu sekarang (current time) dengan waktu yang kita tentukan (dalam contoh ini adalah 1 Januari 2011 pukul 00:00 WIB waktu serve
Publish Post
Ide untuk mencari selisih antara current time dengan 1 Januari 2011 pukul 00:00 WIB adalah menggunakan function
mktime()
. Dengan mktime()
ini, kita bisa dapatkan selisih waktu keduanya dalam satuan detik. Function mktime()
adalah function yang menghasilkan suatu bilangan integer yang merupakan banyaknya selisih waktu dalam satuan detik antara 1 Januari 1970 00:00:00 GMT dengan waktu yang ditentukan.Berikut ini adalah cara penggunaan perintah mktime() untuk mendapatkan jumlah detik antara 1 Januari 1970 00:00:00 GMT dengan tanggal x, bulan y, tahun z pada pukul m:n:o waktu server.
mktime(m, n, o, y, x, z);
mktime()
pada tanggal 1 Januari 2011 pukul 00:00:00 WIB adalah:mktime(0, 0, 0, 1, 1, 2011);
mktime()
untuk current time adalah:mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y"));
date("H")
untuk mendapatkan jam saat ini, date("i")
untuk mendapatkan menit saat ini, date("s")
untuk mendapatkan detik saat ini, serta date("m")
, date("d")
, dan date("Y")
berturut-turut untuk mendapatkan bulan, tanggal dan tahun saat ini.Selanjutnya untuk mendapatkan selisih jumlah detik antara current time dengan 1 Januari 2011 00:00:00 cukup mengurangi saja hasil
mktime()
keduanya. Setelah didapatkan jumlah detik selisih antara kedua waktu tersebut, barulah kita proses untuk dinyatakan dalam a hari, b jam, c menit, dan d detik.Berikut ini adalah script untuk mencari selisih waktu antara current time dengan 1 Januari 2011 00:00:00 dalam satuan a hari, b jam, c menit, dan d detik.
date.php
// mengatur time zone untuk WIB.
date_default_timezone_set("Asia/Jakarta");
// mencari mktime untuk tanggal 1 Januari 2011 00:00:00 WIB
$selisih1 = mktime(0, 0, 0, 1, 1, 2011);
// mencari mktime untuk current time
$selisih2 = mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y"));
// mencari selisih detik antara kedua waktu
$delta = $selisih1 - $selisih2;
// proses mencari jumlah hari
$a = floor($delta / 86400);
// proses mencari jumlah jam
$sisa = $delta % 86400;
$b = floor($sisa / 3600);
// proses mencari jumlah menit
$sisa = $sisa % 3600;
$c = floor($sisa / 60);
// proses mencari jumlah detik
$sisa = $sisa % 60;
$d = floor($sisa / 1);
echo "Waktu saat ini: ".date("d-m-Y H:i:s")."
";
echo "Masih: ".$a." hari ".$b." jam ".$c." menit ".$d." detik lagi, menuju tahun baru 1 Januari 2011";
?>
Barangkali ada yang masih bingung untuk proses menyatakan jumlah detik ke dalam berapa hari? Dalam 1 jam terdapat 60 menit = 3600 detik. Sehingga dalam 1 hari ada 24 x 3600 = 86400 detik. Sehingga untuk menyatakan jumlah detik ke dalam hari, jumlah detik dibagi dengan 86400. Function
floor()
digunakan untuk pembulatan ke bawah, sehingga hasil pembagiannya diperoleh hasil bulat. Sisa pembagiannya (modulo atau %) digunakan untuk perhitungan dalam satuan jam. Demikian seterusnya…Contoh perhitungan, misal selisih detik current time dengan tanggal 1 Januari 2011 00:00:00 adalah 123456. Maka untuk menyatakan 123456 detik ini ke dalam a hari, b jam, c menit, dan d detik, caranya:
a = floor(123456/86400) = 1 (hari) ----------------------------------------- $sisa = 123456 % 86400 = 37056 (detik) b = floor(37056/3600) = 10 (jam) ----------------------------------------- sisa = 37056 % 3600 = 1056 (detik) c = floor(1056/60) = 17 (menit) ----------------------------------------- sisa = 1056 % 60 = 36 (detik) d = floor(1056/1) = 36 (detik)yang akan menghasilkan 1 hari, 10 jam, 17 menit, dan 36 detik.
OK… saya harap penjelasan di atas cukup jelas ya… Jika belum jelas, coba pahami dan resapi logikanya

Jika Anda refresh script di atas via browser, maka akan tampak perubahan selisih waktunya.
Selanjutnya kita jalankan script di atas menggunakan AJAX supaya dapat melakukan refresh otomatis setiap 1 detik secara asynchronous tanpa via browser.
Ini dia scriptnya:
countdown.php
<script type="text/javascript"> function ajax() { if (window.XMLHttpRequest) { // untuk IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else { // untuk IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { // hasil pembacaan script date.php akan ditampilkan di komponen id="hasil" document.getElementById("hasil").innerHTML = xmlhttp.responseText; } } // menjalankan script date.php secara asynchronous xmlhttp.open("GET","date.php", true); xmlhttp.send(); // refresh time 1 detik (1000 ms) setTimeout("ajax()", 1000); } script>
Akhirnya, ketemu juga yang dicari-cari. Belum bisa langsung dicoba, sih, nunggu momen yang tepat. Btw, terima kasih banyak
BalasHapushehehe...
BalasHapussy sendri belum mencoba gan...
makasih atas komentarnya...
^_^