Menghitung Selisih Waktu di PHP untuk absensi

Menghitung Selisih Waktu Dengan PHP – Cara Termudahl

Pada kesempatan kali ini kita akan membahas bagaimana cara menghitung selisih waktu dengan PHP.
Pada PHP, terdapat banyak cara untuk menghitung selisih tanggal dan waktu, kali ini kita akan membahas beberapa cara mulai dari yang paling mudah hingga yang paling rumit.

I. Menghitung Selisih Waktu Dengan PHP – Dengan Fungsi date_diff – Cara Paling Mudah

Cara termudah menghitung selisih waktu dengan PHP adalah menggunakan fungsi date_diff(), fungsi ini mulai ada pada PHP versi 5.3.0. adapun format penulisannya adalah:
date_diff($datetime1, $datetime2)
contoh:
<?php
$awal = date_create('1988-08-10');
$akhir = date_create(); // waktu sekarang
$diff = date_diff( $awal, $akhir );

echo 'Selisih waktu: '
echo $diff->y . ' tahun, ';
echo $diff->m . ' bulan, ';
echo $diff->d . ' hari, ';
echo $diff->h . ' jam, ';
echo $diff->i . ' menit, ';
echo $diff->s . ' detik, ';
// Output: Selisih waktu: 28 tahun, 5 bulan, 9 hari, 13 jam, 7 menit, 7 detik

echo 'Total selisih hari : ' . $diff->days;
// Output: Total selisih hari: 10398
Penjelasan:
  • Argumen, yaitu $datetime1 dan $datetime2 harus berupa objek DateInterval, objek ini dibuat menggunakan fungsi date_create()
  • Argumen tidak harus urut dari yang kecil, kita dapat membalik urutan dengan menempatkan tanggal besar di argumen pertama dan tanggal kecil di argumen kedua, hasilnya sama saja.
  • $diff  = date_diff( $akhir, $awal );
  • Hasil dari fungsi date_diff() adalah objek DateInterval, yang memiliki berbagai property yang dapat digunakan untuk mengakses tanggal, misal property d yang bernilai jumlah selisih hari. Pada contoh diatas, untuk melihat semua property jalankan statemen echo <pre>; print_r($diff)

Format Output

Objek DateInterval dari fungsi date_diff() juga memiliki method format yang dapat digunakan untuk menghasilkan output dengan format tertentu, misal:
<?php
$diff = date_diff( date_create('1988-08-10'), date_create() );
echo $diff->format('Usia anda adalah %Y tahun %d hari'); // Usia anda adalah 29 tahun 9 hari.
Penjelasan:
  • Agar karakter diterjemahkan menjadi waktu, maka awali dengan tanda persen (%) pada contoh diatas %Ydan %d
  • Tahun: Y untuk 4 digit tahun, dan y untuk 2 digit tahun.
  • Bulan: M untuk 2 digit bulan, dan m untuk 1 digit bulan.
  • Tanggal: D untuk 2 digit tanggal, dan d untuk 1 digit tanggal.
  • Hari: a untuk total beda waktu dalam hari. Misal:
  • $diff  = date_diff( date_create('1988-08-10'), date_create() );
    echo $diff->format('Usia anda adalah %a hari'); // Usia anda adalah 10389 hari.
  • Jam: H untuk 2 digit jam, dan h untuk 1 digit jam.
  • Menit: I untuk 2 digit menit, dan i untuk 1 digit menit.
  • Detik: S untuk 2 digit detik, dan s untuk 1 digit detik.

Fungsi untuk menghitung beda waktu

Setelah kita memahami cara termudah untuk menghitung selisih waktu, maka untuk lebih memudahkan lagi dengan tanpa menulis kode berulang kali, maka kode tersebut dapat kita letakkan dalam sebuah fungsi:
function beda_waktu($date1, $date2, $format = false) 
{
$diff = date_diff( date_create($date1), date_create($date2) );
if ($format)
return $diff->format($format);

return array('y' => $diff->y,
'm' => $diff->m,
'd' => $diff->d,
'h' => $diff->h,
'i' => $diff->i,
's' => $diff->s
);
}
Contoh penggunaan:
echo beda_waktu('1988-08-10', date('Y-m-d'), 'Selisih %y tahun'); // Output: Selisih 28 tahun;

$diff = beda_waktu('1988-08-10', date('Y-m-d'));
echo 'Selisih: ' . $diff['y'] . ' tahun'; // Output: Selisih 28 tahun

II. Menghitung Selisih Waktu Dengan PHP – Dengan Objek DateTime

Jika sebelumnya kita menghitung beda waktu dengan model procedural style, yaitu menggunakan fungsi date_diff(), kali ini, kita akan menggunakan model Object Oriented dengan menggunakan objek DateTime.
Sama seperti fungsi date_diff(), objek DateTime mulai ada pada PHP versi 5.3.0
Contoh penggunaan:
<?php
$awal = new DateTime('1988-08-10');
$akhir = new DateTime(); // Waktu sekarang
$diff = $awal->diff($akhir);

echo 'Selisih waktu: ';
echo $diff->y . ' tahun, ';
echo $diff->m . ' bulan, ';
echo $diff->d . ' hari, ';
echo $diff->h . ' jam, ';
echo $diff->i . ' menit, ';
echo $diff->s . ' detik, ';

// Output: Selisih waktu: 28 tahun, 5 bulan, 9 hari, 13 jam, 7 menit, 7 detik
Jika diperhatikan, cara penggunaan dan output yang dihasilkan mirip dengan model procedural style, ya karena sebenarnya fungsi date_diff() merupakan alias dari DateTime::diff() — objek DateTime dengan method diff() —
Sama seperti date_diff(), objek DateTime juga memiliki method format yang digunakan untuk menghasilkan format tertentu, disamping itu, karakter date yang digunakan juga sama:
<?php
$awal = new DateTime('1988-08-10');
$akhir = new DateTime(); // Waktu sekarang
$diff = $awal->diff($akhir);
echo $diff->format('Usia anda adalah %Y tahun %d hari'); // Usia anda adalah 29 tahun 9 hari.

III. Menghitung Selisih Waktu Dengan PHP – Dengan Fungsi Strtotime

Sebelum php 5.3.0, untuk menghitung selisih tanggal dan waktu pada PHP, kita menggunakan fungsi strtotime(), meskipun terlihat jadul, fungsi ini tetap powerfull. Contoh penggunaannya adalah:
<?php
$awal = strtotime('1988-08-10');
$akhir = time(); // Waktu sekarang
$diff = $akhir - $awal;
echo 'Usia anda adalah ' . floor($diff / (60 * 60 * 24 * 365)) . ' tahun';
echo 'Usia anda adalah ' . floor($diff / (60 * 60 * 24)) . ' hari';
Pada contoh diatas, fungsi strtotime() akan menghasilkan waktu dalam format timestamp. Timestamp adalah format waktu berupa detik yang dihitung sejak epoch time (1970-01-01 00:00:00), sehingga timestamp 1 berarti 1 detik sejak epoch time.
Karena strtotime berupa detik, maka untuk menghitung selisih waktu, kita juga harus melakukan pembagian dengan detik, pada contoh diatas, untuk menghitung hari, kita gunakan perkalian detik, menit, dan jam (60 x 60 x 24).
Meskipun cara ini lebih ribet dibanding kedua cara sebelumnya, cara ini memiliki beberapa kelebihan, yaitu dapat menghitung selisih berdasarkan jam, menit, detik dengan lebih mudah, contoh:
<?php
$awal = strtotime('2017-08-10 10:05:25');
$akhir = strtotime('2017-08-11 11:07:33');
$diff = $akhir - $awal;

$jam = floor($diff / (60 * 60));
$menit = $diff - $jam * (60 * 60);
echo 'Waktu tinggal: ' . $jam . ' jam, ' . floor( $menit / 60 ) . ' menit';
Perhitungan diatas akan lebih susah jika menggunakan fungsi date_diff() atau objek DateTime
Lebih jauh tentang fungsi time() dan strtotime() dapat dibaca pada artikel: Memahami Fungsi Time, Strtotime, dan Mktime Pada PHP – Memanipulasi Waktu

IV. Timezone

Ketika kita bekerja dengan tanggal, jangan lupa untuk selalu menyesuaikan timezone tau zona waktu. Karena pasti ada selisih ketika kita menghitung waktu sekarang.
Hal ini disebabkan secara default php akan menggunakan zona waktu Eropa atau Amerika dengan selisih waktu lebih dari 5 jam.
Untuk mengubah zona waktu dapat menggunakan fungsi date_default_timezone_set(), misal:
<?php
$awal = date_create('2017-01-20 01:05:25');
$akhir = date_create(); // waktu sekarang, pukul 06:13
$diff = date_diff( $akhir, $awal );
echo $diff->h; // Hasil: 0

date_default_timezone_set('Asia/Jakarta');
$awal = date_create('2017-01-20 01:05:25');
$akhir = date_create(); // waktu sekarang, pukul 06:13
$diff = date_diff( $akhir, $awal );
echo $diff->h; // Hasil: 5
Dari contoh diatas terlihat bahwa terdapat selisih waktu antara sebelum dan sesudah pengaturan zona waktu.
Lebih jauh tentang timezone dapat dibaca pada artikel: Memahami Zona Waktu (Timezone) dan Selisih Waktu Pada PHP

IV. Penutup

Setidaknya terdapat tiga cara menghitung selisih waktu pada php, yaitu menggunakan fungsi date_diff(), objek DateTime, dan fungsi strtotime()
Pertimbangkan untuk terlebih dahulu menggunakan fungsi date_diff() atau objek DateTime, karena keduanya jauh lebih mudah dibanding menggunakan fungsi strtotime().
Namun demikian, untuk kasus tertentu, lebih mudah menggunakan fungsi strtotime() dibanding kedua cara lainnya.
Demikian pembahasan mengenai cara menghitung selisih tanggal dan waktu pada PHP, semoga bermanfaat.


sumber :https://jagowebdev.com/menghitung-selisih-waktu-dengan-php/
Read More

Comments

3-comments

FOLLOW ME

LATEST

3-latest-65px

Featured Post

© . All rights reserved.

Archive

Latest video-course

1-tag:Videos-800px-video

Campus

4-tag:Campus-500px-mosaic

About

This just a demo text widget, you can use it to create an about text, for example.

Testimonials

3-tag:Testimonials-250px-testimonial

Header Background

Header Background
Header Background Image. Ideal width 1600px with.

Popular Posts

Logo

Logo
Logo Image. Ideal width 300px.

Section Background

Section Background
Background image. Ideal width 1600px with.

Section Background

Section Background
Background image. Ideal width 1600px with.

Sections-BTLabels

Ads block

Banner 728x90px

Courses

6-latest-350px-course

Section Background

Section Background

Search This Blog

Widget HTML Atas

SECCIONS

Widget HTML Produk

Widget HTML Jasa

Advertisement

Main Ad

Categories

10 permasalahan 59 62 63 64 79 Tahun 2014 administrator adobeprimer aktivasi windows 10 android studio aplikasi aplikasi idm aplikasi klinik aplikasi raport K13 ar augmented reality aulogisbootspeed banner basic belajar Belajar Logika Informatika Bingkai PSHT Bingkai bingkai Sertifikat blender blog penjualan blogger jualan bobol wifi C++ Canon IP2770 cara bobol wifi cara buat blog cara buatweb cara install cms cara install wordpress cara membuat blog penjualan cara mengguanakan vpn cek pc cek produk key pc cek serial number pc CI ci4 class cms cms wordpress codeigniter contoh mehtod crack crud CI4 dapodik dapodik terjadi kesalahan dasar data daun sirih desaign desain medali desain sertifkat devc dowload software download download vpn erorr 500 file firewall formulir formulir penilaian p[ertandingan pencak silat formulir pertandingan free freebish function gratis hack wifi hacker wifi hacking handler herbal hms hms kit http 500 huwawei idm idm terbaru instalasi install worpress internet download manager ioncubeloader ip address jam jaringan javascript json kesahatan kodeigniter kodinglangka komputer komputer lemot kotlin Kumpuran Permendikbud No. 61 logo make address manampilkan gambar di wa manfaat daun sirih mars psht marspsht masalah pc medali membuat blog jualan membuat web membuat website mencegah seraangan hacjer mengatasi dapodik bermasalah mengatasi masalah ci mengatasi masalah pc menggunakan vpn menghitung selisih waktu mikrotik motivasi mysql mysql tidak runnig di xampp Native network networking node nodejs obat herbal obyek oop pekerjaan peluang pencak silat pendidikan pengertian cms penjualan pergaulan Permasalahan Komputer pertandingan pesilat.png Photoshop php php native php oop piagam png print printer Printer IP2770 property psht PSHT Cup Bandar Lampung psht jaya raport K13 raport SD K13 Rekam medis rekammedis selisih jam php seo sertifikat sertifikat psht sh cup sharing sharing printer sharingdata sharingfile sirih hijau sirih merah software software bandicam software terbaru software vidio sofware idm source code source code raport K13 sourcecode SQL system telnet turbo vpn tutorial tutorial dasar web tutorial oop tutorial php tutorial sql tutorial web tutorialjaringan ukuran idcard unity update bagan video vpn vuvoria web web dasar web simple website widows10 wifi hack wifi telnet windows windows defender windows8 wordpress worpress xampp

SEARCH

FOLLOW US

Popular

SEARCH