Menghitung selisih waktu di mysql

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

<?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
2, 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
    <?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
    3 dan
    <?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
    4 harus berupa objek DateInterval, objek ini dibuat menggunakan fungsi
    <?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
    5
  • 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
    <?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
    2 adalah objek DateInterval, yang memiliki berbagai property yang dapat digunakan untuk mengakses tanggal, misal property
    <?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
    7 yang bernilai jumlah selisih hari. Pada contoh diatas, untuk melihat semua property jalankan statemen
    <?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
    8

Format Output

Objek DateInterval dari fungsi

<?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
2 juga memiliki method
$diff  = date_diff( $akhir, $awal );
0 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 (
    $diff  = date_diff( $akhir, $awal );
    1) pada contoh diatas
    $diff  = date_diff( $akhir, $awal );
    2 dan
    $diff  = date_diff( $akhir, $awal );
    3
  • Tahun: 
    $diff  = date_diff( $akhir, $awal );
    4 untuk 4 digit tahun, dan
    $diff  = date_diff( $akhir, $awal );
    5 untuk 2 digit tahun.
  • Bulan: 
    $diff  = date_diff( $akhir, $awal );
    6 untuk 2 digit bulan, dan
    $diff  = date_diff( $akhir, $awal );
    7 untuk 1 digit bulan.
  • Tanggal:
    $diff  = date_diff( $akhir, $awal );
    8 untuk 2 digit tanggal, dan
    <?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
    7 untuk 1 digit tanggal.
  • Hari:
    <?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.
    0 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:
    <?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.
    1 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

<?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
2, kali ini, kita akan menggunakan model Object Oriented dengan menggunakan objek DateTime.

Sama seperti fungsi

<?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
2, 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

<?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
2 merupakan alias dari
<?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.
5 — objek DateTime dengan method diff() —

Sama seperti

<?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
2, objek
<?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.
7 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

<?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.
8, 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

<?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.
8 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  = 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
0

Perhitungan diatas akan lebih susah jika menggunakan fungsi

<?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
2 atau objek
<?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.
7

Lebih jauh tentang fungsi

$diff  = date_diff( date_create('1988-08-10'), date_create() );
echo $diff->format('Usia anda adalah %a hari'); // Usia anda adalah 10389 hari.
2 dan
<?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.
8 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

$diff  = date_diff( date_create('1988-08-10'), date_create() );
echo $diff->format('Usia anda adalah %a hari'); // Usia anda adalah 10389 hari.
4, misal:

<?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
1

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

<?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
2, objek
<?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.
7, dan fungsi
<?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.
8

Pertimbangkan untuk terlebih dahulu menggunakan fungsi

<?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
2 atau objek
<?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.
7, karena keduanya jauh lebih mudah dibanding menggunakan 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
			);
}
0

Namun demikian, untuk kasus tertentu, lebih mudah menggunakan fungsi

<?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.
8 dibanding kedua cara lainnya.

Demikian pembahasan mengenai cara menghitung selisih tanggal dan waktu pada PHP, semoga bermanfaat.

Subscibe Now

Suka dengan artikel di Jagowebdev.com? jangan sampai ketinggalan, segera join ke milis kami untuk update informasi terbaru dari Jagowebdev.com

Komitmen Kami: Kami senantiasa menghargai privasi Anda dan tidak akan membagikan identitas Anda ke pihak manapun.