Serba-Serbi Pengolahan Data Waktu dengan PHP


Sebuah sistem yang baik tentu dirancang untuk berbagai keperluan yang kompleks dan beragam sesuai dengan target yang ingin dicapai oleh si pemrogram. Masalah penanganan waktu baik itu tanggal, jam, menit, maupun detik adalah hal-hal yang umum dan wajar diolah dalam sebuah sistem. Sistem penggajian misalnya, tentu akan sangat bergantung kepada unsur waktu ini karena pengolahan data gaji bulanan seorang karyawan tentunya ditentukan oleh jumlah hari hadir bekerja, jam masuk dan jam pulang serta menitan dan detikannya, serta total jumlah jam lemburnya. Nah, angka-angka yang mewakili pewaktuan inilah yang sering digunakan dalam proses penghitungan sesuatu hal yang sangat riskan dan beresiko. Sebut saja, tentunya perusahaan tidak mau donk rugi karena salah bayar gaji bulanan yang disebabkan oleh sistem tidka dapat mengolah data yang mengandung bilangan waktu di dalamnya. Semoga Anda mengerti dengan prolog singkat ini.

Nah, oleh sebab itulah pada artikel ini kita akan membahas secara singkat tentang beberapa teknik yang disediakan bahasa PHP dalam mengolah data waktu baik tanggal, jam, menit, dan detik.

Secara teori, kebutuhan dasar yang dibutuhkan hanyalah data dua buah waktu, misalnya tanggal1 dan tanggal2. Maka, kedua data inilah yang kita olah dan pecah-pecah lagi menjadi beberapa informasi yang berguna bagi kita. Biasanya, untuk menghitung selisih dua data tanggal kita bisa menggunakan perintah:

$total_tanggal = datedif( "tanggal1", tanggal2" );

Maka, dengan kode di atas kita bisa mendapatkan total selisih tanggal yang ada di dalam range tanggal tersebut. Beberapa teknik lainnya yang dapat digunakan adalah sebagai berikut.

Dengan langsung mengurangkan data tanggal yang ada dengan fungsi strtotime:

<?php
$tanggal = strtotime("2015-07-25 09:40:40") - strtotime("2015-07-24 02:18:50");
$days    = floor($tanggal / 86400);
$hours   = floor(($tanggal - ($days * 86400)) / 3600);
$minutes = floor(($tanggal - ($days * 86400) - ($hours * 3600))/60);
$seconds = floor(($tanggal - ($days * 86400) - ($hours * 3600) - ($minutes*60)));

echo "<p>Tanggal 1: <b>2015-07-25 09:40:40</b><br>\n";
echo "Tanggal 2: <b>2015-07-24 02:18:50</b><br>\n";
echo "Selisih Waktu dalam Integer: <b>{$tanggal}</b></p>\n";
echo "<hr>\n";
echo "Hari: {$days}<br>\n";
echo "Jam: {$hours}<br>\n";
echo "Menit: {$minutes}<br>\n";
echo "Detik: {$seconds}<br>\n";
?>

Dengan membuat data tanggal ke dalam beberapa variabel tertentu, tetapi tetap menggunakan fungsi strtotime:

<?php
$tanggal1 = strtotime("2008-12-13 10:42:00");
$tanggal2 = strtotime("2010-10-20 08:10:00");

$diff = $tanggal2-$tanggal1;
echo "<p>Tanggal 1: <b>{$tanggal1}</b><br>\n";
echo "Tanggal 2: <b>{$tanggal2}</b><br>\n";
echo "Total selisih waktu: {$diff}</p>\n";;
echo "<hr>\n";
$days    = floor($diff / 86400);
$hours   = floor(($diff - ($days * 86400)) / 3600);
$minutes = floor(($diff - ($days * 86400) - ($hours * 3600))/60);
$seconds = floor(($diff - ($days * 86400) - ($hours * 3600) - ($minutes*60)));

echo "Hari: {$days}<br>\n";
echo "Jam: {$hours}<br>\n";
echo "Menit: {$minutes}<br>\n";
echo "Detik: {$seconds}<br>\n";
?>

Dengan mengkonversi data tanggal yang ada ke sistem UNIX dna tetap menggunakan fungsi strtotime, lalu menghitung jumlah detik yang ada diantara kedua tanggal tersebut. Selanjutnya dipecah-pecah lagi sesuai dengan kebutuhan yang diinginkan.

<?php
$date1 = "2007-03-24";
$date2 = "2009-06-26";

$diff = abs(strtotime($date2) - strtotime($date1));

$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));

echo "<p>First Date: <b>{$date1}</b><br>Second Date: <b>{$date2}</b></p>\n";
echo "<hr>\n";
printf("%d years, %d months, %d days\n", $years, $months, $days);
?>

Atau, teknik lainnya, dengan mengembalikan nilai absolut total jumlah hari di antara dua tanggal dalam sebuah fungsi.

<?php
function dateDiff ($d1, $d2) {
    // mengembalikan total jumlah hari di antara dua tanggal    
    return round(abs(strtotime($d1) - strtotime($d2))/86400);
}

$tgl1 = "2015-07-31";
$tgl2 = "2015-07-01";

echo "<p>Tanggal 1: <b>{$tgl1}</b><br>\n";
echo "Tanggal 2: <b>{$tgl2}</b></p>\n";
echo "<hr>\n";
echo "<p>Jumlah hari: ".dateDiff( $tgl1, $tgl2 )."</p>\n";
?>

Nah, demikianlah tutorial singkat tentang serba-serbi pengolahan waktu dengan menggunakan bahasa PHP. Sebenarnya ide dasar ini bisa dikembangkan menjadi lebih kompleks lagi tergantung dengna target yang ingin dicapai. Seperti biasa, sudha menjadi tugas Anda untuk mewujudkannya. Semoga tulisan ini berguna bagi mereka yang sedang membutuhkan.

Salam Teduh,

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s