Maklumat

Tulisan-tulisan terkini dapat juga didapatkan di halaman Kompasiana di alamat https://kompasiana.com/didikaha

Khusus untuk konten-konten sastra seperti puisi, cerpen dan esai silahkan kunjungi http://blog.edelweis-art.com. Terima kasih (Penulis)

Senin, Maret 30, 2009

Class untuk Menghitung Waktu Suatu Peristiwa

Banyak jalan menuju Roma. Banyak cara pula yang bisa dilakukan untuk menghitung waktu kejadian suatu peristiwa, seperti berapa lama perjalanan yang telah ditempuh Kang Rohim dari Brebes ke Jakarta menggunakan kereta api kemarin (siapa Kang Rohim?? ;) Just sample..), atau berapa lama seorang karyawan hadir di kantor melakukan pekerjaannya selama satu bulan.

Class PHP di bawah ini hanyalah satu cara yang dapat dimanfaatkan untuk melakukan penghitungan waktu tersebut. Class Count Hour atau Penghitung Jam (CountHour.class.php).

Class Count Hour ini mempunyai fungsi pokok yaitu untuk menghitung lama kejadian suatu peristiwa dan juga menghitung jumlah waktu kejadian beberapa peristiwa. Contoh paling sederhana dari penerapan class ini adalah untuk menghitung absensi karyawan dalam satu minggu atau satu bulan.

class CountHour {

function
check_time($time) { // mengecek input waktu, format waktu harus JJ:MM:DD
$pattern = '^([0-9]{2}):([0-9]{2}):([0-9]{2})$';
if(
ereg($pattern,$time)) {
return
true;
} else {
die(
'Error. Format '.$time.' seharusnya JJ:MM:DD.');
}
}

function
check_time2($time) {
// mengecek input waktu, format waktu harus J:M:D
$pattern = '^([0-9]{1,100}):([0-9]{1,2}):([0-9]{1,2})$';
if(
ereg($pattern,$time)) {
return
true;
} else {
die(
'
Error. Format '.$time.' seharusnya J:M:D.');
}
}

function
seconds($time) { // merubah satuan waktu menjadi detik
$this->check_time($time);

$time = explode(':',$time);
$hour = $time[0]*3600;
$minute = $time[1]*60;
$second = $time[2];

$seconds = $hour+$minute+$second;
return
$seconds;
}

function
std($time) { // merubah waktu dengan satuan detik ke format JJ:MM:DD
if($time<0) {
return
'tidak terdefinisikan';
} elseif(
$time<3600) {
$hour = 0;
$hourr = $time;
} else {
$hour = $time/3600;
$hour = floor($hour);
$hourr = $time%3600;
}
if(
$hourr<60) {
$minute = 0;
$second = $hourr;
} else {
$minute = $hourr/60;
$minute = floor($minute);
$second = $hourr%60;
}

if(
strlen($hour)==1) {
$hour = '0'.$hour;
} else {
$hour = $hour;
}
if(
strlen($minute)==1) {
$minute = '0'.$minute;
} else {
$minute = $minute;
}
if(
strlen($second)==1) {
$second = '0'.$second;
} else {
$second = $second;
}

$time = $hour.':'.$minute.':'.$second;
return
$time;
}

function
diff_seconds($first,$last) { // menghitung lama waktu dalam satuan detik
$first1 = $this->seconds($first);
$last1 = $this->seconds($last);
if(
$last1<$first1 || $last1==$first1) {
die(
'error. '.$first.' lebih besar daripada '.$last);
} else {
return
$last1-$first1;
}
}

function
diff($first,$last) { // menghitung lama waktu dan menampilkannya dengan format JJ:MM:DD
$diff = $this->diff_seconds($first,$last);
return
$this->std($diff);
}

function
define_hour($time) { // mendefinisikan jam, menit dan detik
$this->check_time2($time);

$time_array = explode(':',$time);
$hourr = $time_array[0];
$minutee = $time_array[1];
$secondd = $time_array[2];

if(
$hourr==0) {
$hourr = '';
} elseif(
$hourr<10) {
$hourr = str_replace('0','',$hourr).' jam ';
} else {
$hourr = $hourr.' jam ';
}
if(
$minutee==0) {
$minutee = '';
} elseif(
$minutee<10) {
$minutee = str_replace('0','',$minutee).' menit ';
} else {
$minutee = $minutee.' menit ';
}
if(
$secondd==0) {
$secondd = '';
} elseif(
$secondd<10) {
$secondd = str_replace('0','',$secondd).' detik';
} else {
$secondd = $secondd.' detik';
}

return
trim($hourr.$minutee.$secondd);
}
}

Contoh penggunaan (1):

include('CountHour.class.php');
$time = new CountHour();

$first = '12:57:23';
$last = '21:09:04';
$time_difference = $time->diff($first,$last);
$time_difference2 = $time->define_hour($time_difference);

echo 'Waktu Mulai = '.$first.' Selesai =
'.$last.' Lama kejadian = '.$time_difference.' ('.$time_difference2.')';

Contoh penggunaan (2):

// menghitung absensi selama satu minggu

include('CountHour.class.php');
$time = new CountHour();

$day[0] = '08:00:27,17:05:23'; // variabel jam masuk dan pulang hari ke-1
$day[1] = '07:50:25,17:12:12'; // variabel jam masuk dan pulang hari ke-2
$day[2] = '07:55:34,17:05:00'; // variabel jam masuk dan pulang hari ke-3
$day[3] = '08:01:22,17:03:54'; // variabel jam masuk dan pulang hari ke-4
$day[4] = '08:03:14,17:02:28'; // variabel jam masuk dan pulang hari ke-5
$day[5] = '07:59:07,17:11:11'; // variabel jam masuk dan pulang hari ke-6
$day[6] = '08:10:43,16:01:20'; // variabel jam masuk dan pulang hari ke-7

// jam istirahat
$rest_time = '01:00:00'; // lama waktu istirahat, dalam hal ini 1 jam
$rest_time1 = $time->seconds($rest_time); // konversi jam istirahat ke satuan detik

// mendefinisikan jam, menit, detik
$restt = $time->define_hour($rest_time);

// menghitung jumlah hari kerja
$count_day = count($day);

for($i=0;$i<$count_day;$i++) {
// mengambil waktu absen masuk dan absen pulang
$hour[$i] = explode(',',$day[$i]);

// menghitung lama jam kerja
$diff_seconds[$i] = $time->diff_seconds($hour[$i][0],$hour[$i][1])-$rest_time1;
$diff[$i] = $time->std($diff_seconds[$i]);

$j = $i+1;
echo 'Hari ke-'.$j.'. Masuk = '.$hour[$i][0].' Pulang = '.$hour[$i][1].' Jam kerja = '.$diff[$i].' ';
}

// menghitung total jam kerja
$total_seconds = array_sum($diff_seconds);
$total = $time->std($total_seconds);
$totall = $time->define_hour($total);

echo 'Total jam kerja = '.$total.' ('.$totall.') => Jam kerja = jumlah jam di antara absen datang dan pulang dikurangi jam istirahat ('.$restt.')';

Silahkan klik di sini untuk mendownload Class Count Hour di atas.

Tidak ada komentar:

Posting Komentar