Anda harus selalu menyimpan tanggal Anda dalam format datetime MySQL (YYYY-MM-DD). Ini memungkinkan Anda untuk dengan mudah memanfaatkan fungsionalitas tanggal bawaan MySQL. Menyimpannya dalam format lain berarti (berpotensi lebih banyak) bekerja untuk Anda saat Anda ingin melakukan lebih banyak daripada hanya menampilkan nilai-nilai tersebut.
Untuk mencapai apa yang ingin Anda lakukan dengan PHP, Anda akan DateTime()
(berdasarkan jawaban ini
):
$datetime1 = new DateTime($firstDate);
$datetime2 = new DateTime($secondDate);
$interval = $datetime1->diff($datetime2);
if ($interval->days <= 7)
{
$elapsed = $interval->format('%y years, %m months, %a days, %h hours, %i minutes, %S seconds');
$elapsed = str_replace(array('0 years,', ' 0 months,', ' 0 days,', ' 0 hours,', ' 0 minutes,'), '', $elapsed);
$elapsed = str_replace(array('1 years, ', ' 1 months, ', ' 1 days, ', ' 1 hours, ', ' 1 minutes'), array('1 year, ', '1 month, ', ' 1 day, ', ' 1 hour, ', ' 1 minute'), $elapsed);
echo $elapsed;
}
else
{
echo $firstDate;
}
$datetime1 = new DateTime($firstDate);
$datetime2 = new DateTime($secondDate);
Baris-baris ini membuat DateTime()
objek dengan tanggalnya masing-masing.
$interval = $datetime1->diff($datetime2);
Baris ini mengurangi tanggal kedua dari tanggal pertama dan mengembalikan selisihnya sebagai DateInterval()
objek.
if ($interval->days > 7)
Baris ini memeriksa untuk melihat tujuh hari atau lebih telah berlalu antara dua tanggal. Jika demikian blok kode pertama dijalankan. Jika tidak, tanggal pertama akan dicetak.
$elapsed = $interval->format('%y years, %m months, %a days, %h hours, %i minutes, %S seconds');
$elapsed = str_replace(array('0 years,', ' 0 months,', ' 0 days,', ' 0 hours,', ' 0 minutes,'), '', $elapsed);
$elapsed = str_replace(array('1 years, ', ' 1 months, ', ' 1 days, ', ' 1 hours, ', ' 1 minutes'), array('1 year, ', '1 month, ', ' 1 day, ', ' 1 hour, ', ' 1 minute'), $elapsed);
echo $elapsed;
Blok kode ini hanya mengambil perbedaan tanggal antara dua tanggal (a DateInterval()
objek) dan memformatnya dalam format yang Anda minta. Baris kedua menghapus periode waktu yang tidak memiliki nilai (yaitu 0 bulan) dan menghapusnya dari string. Baris ketiga mengambil periode dengan satu nilai (yaitu 1 bulan) dan memangkas 's' yang tidak perlu di akhir (yaitu 1 bulan menjadi 1 bulan).