Membuat format tanggal ala Instagram pada PHP

Gambar ilustrasi

Jika Anda bertanya-tanya bagaimana cara membuat tampilan waktu seperti pada aplikasi Instagram menggunakan PHP, Anda berada pada tempat yang tepat, karena di posting kali ini saya akan membagikan tutorialnya.

Untuk memformat tampilan tanggal kita hanya perlu membuat sebuah fungsi. Fungsi tersebut nantinya akan menerima parameter tanggal yang akan diubah menjadi tampilan waktu yang mirip dengan waktu posting status di Instagram.

Contohnya seperti gambar utama pada postingan ini.

Sekarang kita lanjut ke tutorial. Pertama kita bahas bagaimana algoritma dan logikanya kemudian dilanjutkan dengan penerapan pada koding.

Logika dan algoritma

Kita cari tahu dulu perbedaan waktu tanggal yang ingin diformat $time_ago dengan tanggal saat ini $current_time dan hasilnya kita simpan dalam sebuah variabel $time_difference.

Kemudian buat variabel baru sesuai dengan satuan waktu $minutes, $hours, $days, $weeks, $months dan $years.

Variabel tersebut akan digunakan untuk menyimpan hasil pembulatan dari perbedaan waktu $time_difference dibagi dengan jumlah detik/satuan waktu.

Satuan WaktuJumlah Detik
Menit60
Jam3600
Hari86400
Minggu604800
Bulan2629440
Tahun31553280

Kemudian gunakan percabangan if dan else untuk memformat tampilan tanggal pada setiap satuan waktu.

Penerapan pada koding

Silakan copy kode di bawah ini dan simpan pada project aplikasi Anda.

<?php
/**
 * Fungsi konversi format tanggal ala Instagram.
 *
 */
function igDate($datetime)
{
    $time_ago        = strtotime($datetime);
    $current_time    = time();
    $time_difference = $current_time - $time_ago;
    $seconds = $time_difference;
    $minutes = round($seconds / 60 );       // value 60 is seconds
    $hours   = round($seconds / 3600);      // value 3600 is 60 minutes * 60 sec
    $days    = round($seconds / 86400);     // 86400 = 24*60*60;
    $weeks   = round($seconds / 604800);    // 7*24*60*60;
    $months  = round($seconds / 2629440);   // ((365+365+365+365+366)/5/12)*24*60*60
    $years   = round($seconds / 31553280);  // (365+365+365+365+366)/5*24*60*60

    if ($seconds <= 60) {
        return "baru saja";
    } elseif ($minutes <= 60) {
        if ($minutes == 1) {
            return "1 menit yang lalu";
        } else {
            return "$minutes menit yang lalu";
        }
    } elseif ($hours <= 24) {
        if ($hours == 1) {
            return "1 jam yang lalu";
        } else {
            return "$hours jam yang lalu";
        }
    } elseif ($days <= 7) {
        if ($days == 1) {
            return "kemarin";
        } else {
            return "$days hari yang lalu";
        }
    } elseif ($weeks <= 4.3) { //4.3 == 52/12
        if ($weeks == 1) {
            return "1 minggu yang lalu";
        } else {
            return "$weeks minggu yang lalu";
        }
    } elseif ($months <= 12) {
        if ($months == 1) {
            return "1 bulan yang lalu";
        } else {
            return "$months bulan yang lalu";
        }
    } else {
        if ($years == 1) {
            return "1 tahun yang lalu";
        } else {
            return "$years tahun yang lalu";
        }
    }
}

Untuk menggunakannya kita cukup memanggil fungsi igDate($datetime) dan memasukkan parameter tanggal.

Contoh:

<?php echo igDate("2018-12-25 12:10:45"); ?>

Format tampilan waktu pada kode sebelumnya tidak akan pernah menampilkan tanggal sebenarnya (25 Desember 2018).

Agar fungsi tersebut dapat menampilkan tanggal sebenarnya, maka kita dapat menandai batas waktu tertentu pada percabangan if else.

Jadi jika sudah mencapai batas waktu yang telah kita atur, maka format tampilan waktu berubah menjadi tanggal sebenarnya (tanggal bulan tahun).