2 min read

Membuat Pencarian Berdasarkan Rentang Waktu di Laravel

Dalam tulisan kali ini saya mencoba untuk membuat fungi pencarian berdasarkan rentang waktu setahun, sebulan, seminggu, dan sehari terakhir. Sebelumnya saya sudah memiliki data seperi ini :

Title	        Created At
Artikel 3	2016-09-26 13:53:04
Artikel 15	2016-09-29 13:53:04
Artikel 4	2016-09-30 13:53:04
Artikel 6	2016-09-30 13:53:04
Artikel 2	2016-10-05 13:53:04
Artikel 16	2016-10-07 13:53:04
Artikel 10	2016-10-11 13:53:04
Artikel 21	2016-10-16 13:53:04
Artikel 19	2016-10-17 13:53:04
Artikel 23	2016-10-18 13:53:04
Artikel 1	2016-10-19 13:53:04
Artikel 13	2016-10-23 13:53:04
Artikel 18	2016-10-25 13:53:04
Artikel 17	2016-10-30 13:53:04
Artikel 5	2016-10-31 13:53:04
Artikel 11	2016-11-03 13:53:04
Artikel 14	2016-11-05 13:53:04
Artikel 25	2016-11-05 13:53:04
Artikel 12	2016-11-09 13:53:04
Artikel 20	2016-11-10 13:53:04
Artikel 22	2016-11-13 13:53:04
Artikel 24	2016-11-16 13:53:04
Artikel 7	2016-11-17 13:53:04
Artikel 9	2016-11-18 13:53:04
Artikel 8	2016-11-19 13:53:04

Data di atas memiili data tertua merupakan data yang dibuat pada tanggal 26 September 2016 sedangkan data terbaru dibuat tanggal 19 November 2016.

Persiapan di Controller

Pertama-tama buat dulu fungsi dateRange() yang fungsinya menentukan rentang waktu :

<?php 

private function dateRange($time)
    {
        switch ($time) {
            case "day":
                $time = [Carbon::now()->subHours(24)->toDateTimeString(), Carbon::now()->toDateTimeString()];
                break;
            case "week":
                $time = [Carbon::now()->subDays(7)->toDateTimeString(), Carbon::now()->toDateTimeString()];
                break;
            case "month":
                $time = [Carbon::now()->subDays(30)->toDateTimeString(), Carbon::now()->toDateTimeString()];
                break;
            case "year":
                $time = [Carbon::now()->subDays(365)->toDateTimeString(), Carbon::now()->toDateTimeString()];
                break;
            default:
                $time = null;
        }

        return $time;
    }

Karena ini membutuhkan Carbon, pastikan carbon sudah didaftarkan di controller yang dipakai.

Membuat Fungsi Pencarian.

<?php 

       
#   $range = $this->dateRange("day"); // gunakan ini jika mencari yang rentang perhari
$range = $this->dateRange("week");// gunakan ini jika mencari yang rentang perminggu
#    $range = $this->dateRange("month");// gunakan ini jika mencari yang rentang perbulan
#    $range = $this->dateRange("year");// gunakan ini jika mencari yang rentang pertahun
$all = Article::whereBetween('created_at', $range)->orderBy('created_at','asc')->get();

Sehingga jika memilih rentang perminggu ( week ) data yang akan dihasilkan seperti berikut.

Title	         Created At
Artikel 7	2016-11-17 13:53:04
Artikel 9	2016-11-18 13:53:04
Artikel 8	2016-11-19 13:53:04