Membuat format tanggal ala Instagram pada PHP
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 di bawah 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 Waktu | Jumlah Detik |
---|---|
Menit | 60 |
Jam | 3600 |
Hari | 86400 |
Minggu | 604800 |
Bulan | 2629440 |
Tahun | 31553280 |
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).