Menghitung denda perpustakaan dengan PHP

Belajar PHP - Cara hitung denda perpustakaan dengan PHP

Tutorial PHP - Menghitung denda keterlambatan pengembalian buku perpustakaan dengan PHP dan MySQL.

Hai, berjumpa lagi dalam blog sederhana ini, belakangan ini kita sering mempelajari tentang fungsi date() pada PHP, dari mulai menghitung selisih waktu sampai dengan menampilkan data berdasarkan tanggal dan bulan.

Pada artikel kali ini juga kita masih bermain dengan fungsi date(), yaitu untuk menghitung total denda perpustakaan.

Kita buat kasus dimana seseorang melakukan peminjaman buku disebuah perpustakaan dengan ketentuan berikut:

  • Peminjaman maksimal hanya 7 hari
  • Keterlambatan pengembalian akan dikenakan denda 1000/hari

Baiklah. Langsung saja kita mulai dengan membuat databasenya. Dan setiap fungsinya akan dijelaskan dibawah code.

Baca juga: Cara menghitung selisih hari dengan PHP

Database

Buka phpMyAdmin lalu pilih menu SQL dan masukan kode berikut untuk membuat database beserta tabel didalamnya.
CREATE DATABASE IF NOT EXISTS `perpus` (
  tgl_pinjam date NOT NULL,
  tgl_kembali date NOT NULL
);

Lalu buat file PHP - nya.

index.php

Kita hanya akan menampilkan data yang terlambat mengembalikan buku, jadi ketika nanti kalian memasukan tanggalnya kurang dari 7 hari dari hari sekarang maka datanya tidak akan ditampilkan.
<?php 

// koneksi
$conn = new mysqli('localhost', 'root', '', 'perpus');

if (isset($_POST['submit'])) {
 // untuk disimpan didatabase
 $tgl_pinjam = $_POST['tgl_pinjam'];
 $tgl_kembali = strtotime("+7 day", strtotime($tgl_pinjam)); // +7 hari dari tgl peminjaman
 $tgl_kembali = date('Y-m-d', $tgl_kembali); // format tgl peminjaman tahun-bulan-hari

 $q = $conn->query("INSERT INTO detail_pinjam (tgl_pinjam, tgl_kembali) VALUES ('$tgl_pinjam', '$tgl_kembali')");
 unset($_POST['submit']);
}

?>

<!DOCTYPE html>
<html>
<head>
 <title>Tutorial PHP</title>

 <!-- Bootstrap -->
 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
</head>
<body>

<div class="container mt-4">
 <center>
  <h1>PlajariKode</h1>
  <h3>Menghitung denda terlambat pengembalian buku</h3>
 </center>


 <div class="card mx-auto col-md-8 mt-4">
  <div class="alert alert-info">
   <small>
    * Waktu peminjaman buku hanya 7 hari<br/>
    * Set waktu > 7 hari sebelum tanggal sekarang<br/>
    * Denda keterlambatan 1000/hari<br/>
    * Hanya menampilkan data yg terlambat mengembalikan
   </small>
  </div>
  <div class="card-body mx-auto">
   <form method="post" action="" class="form-inline">
    <label for="tgl_pinjam">Tanggal Pinjam </label>
    <input type="date" name="tgl_pinjam" id="tgl_pinjam" class="form-control mr-2">
    <button type="submit" name="submit" class="btn btn-primary">Simpan</button>
   </form>

   <table class="table table-bordered mt-4">
    <tr>
     <th>#</th>
     <th>Tgl. Peminjaman</th>
     <th>Tgl. Pengembalian</th>
     <th>Terlambat (Hari)</th>
     <th>Total Denda</th>
    </tr>

    <?php
    // hanya menampilkan data yang terlambat
    $q = $conn->query("SELECT * FROM detail_pinjam WHERE CURDATE() > tgl_kembali");
  
    $no = 1;
    while($r = $q->fetch_assoc()) {
     // untuk menghitung selisih hari terlambat
     $t = date_create($r['tgl_kembali']);
     $n = date_create(date('Y-m-d'));
     $terlambat = date_diff($t, $n);
     $hari = $terlambat->format("%a");

     // menghitung denda
     $denda = $hari * 1000;
    ?>

    <tr>
     <td><?= $no++ ?></td>
     <td><?= $r['tgl_pinjam'] ?></td>
     <td><?= $r['tgl_kembali'] ?></td>
     <td><?= $hari ?></td>
     <td><?= $denda ?></td>
    </tr>

    <?php
    }
    ?>

   </table>
  </div>
 </div>
</div>

</body>
</html>

Output:

Belajar PHP - Cara hitung denda perpustakaan dengan PHP

Penjelasan:

// untuk disimpan didatabase
 $tgl_pinjam = $_POST['tgl_pinjam'];
 $tgl_kembali = strtotime("+7 day", strtotime($tgl_pinjam)); // +7 hari dari tgl peminjaman
 $tgl_kembali = date('Y-m-d', $tgl_kembali); // format tgl peminjaman tahun-bulan-hari

 $q = $conn->query("INSERT INTO detail_pinjam (tgl_pinjam, tgl_kembali) VALUES ('$tgl_pinjam', '$tgl_kembali')");
Pada baris kode diatas kita mengatur variabel $tgl_kembali menjadi 7 hari dari tanggal peminjaman yang dikirimkan.
  • strtotime() berfungsi untuk merubah string menjadi format waktu
  • Pada baris strtotime("+7 day", strtotime($tgl_pinjam)) kita menambahkan 7 hari (+7 day) ke variabel $tgl_pinjam
  • Lalu ubah format $tgl_kembali dengan fungsi date()

// hanya menampilkan data yang terlambat
    $q = $conn->query("SELECT * FROM detail_pinjam WHERE CURDATE() > tgl_kembali");
Perintah diatas hanya akan mengambil data yang terlambat mengembalikan, dengan menggunakan fungsi sql CURDATE() yang berarti tanggal sekarang lebih dari (>) tgl_kembali

Jika tanggal sekarang adalah 20-06-2020 dan tgl_kembali adalah 18-06-2020, maka data akan ditampilkan.

// untuk menghitung selisih hari terlambat
     $t = date_create($r['tgl_kembali']);
     $n = date_create(date('Y-m-d'));
     $terlambat = date_diff($t, $n);
     $hari = $terlambat->format("%a");

     // menghitung denda
     $denda = $hari * 1000;
Untuk menghitung selisih hari kita menggunakan fungsi date_diff() yang sudah pernah kita baha diartikel menghitung selisih hari dengan PHP.

Dan sekaligus juga pada baris kode diatas kita melakukan penghitungan denda.

Download code disini.

Artikel lainnya: Menghitung total bayar dengan PHP

Posting Komentar

2 Komentar

  1. min, cara kasih notif pada saat jatuh tempo tanggal peminjaman gman ya? mksh

    BalasHapus
    Balasan
    1. Mungkin artikel berikut bisa bantu bang https://www.plajarikode.com/2020/11/menampilkan-status-peminjaman-dengan-php.html

      Hapus