Bạn phải luôn lưu ngày của mình ở định dạng ngày giờ của MySQL (YYYY-MM-DD). Điều này cho phép bạn dễ dàng tận dụng chức năng ngày tháng tích hợp sẵn của MySQL. Lưu trữ nó ở bất kỳ định dạng nào khác có nghĩa là (có thể rất nhiều) công việc cho bạn nhiều hơn khi bạn muốn làm được nhiều việc hơn sau đó chỉ cần hiển thị các giá trị đó.
Để thực hiện những gì bạn muốn làm với PHP, bạn sẽ DateTime()
(dựa trên câu trả lời này
):
$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);
Những dòng này tạo ra DateTime()
các đối tượng có ngày tháng tương ứng.
$interval = $datetime1->diff($datetime2);
Dòng này trừ ngày thứ hai từ ngày đầu tiên và trả về sự khác biệt dưới dạng DateInterval()
đối tượng.
if ($interval->days > 7)
Dòng này kiểm tra xem bảy ngày trở lên đã trôi qua giữa hai ngày. Nếu vậy, khối mã đầu tiên được thực thi. Nếu không, ngày đầu tiên sẽ được in ra.
$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;
Khối mã này chỉ lấy chênh lệch ngày giữa hai ngày ( DateInterval()
đối tượng) và định dạng nó theo định dạng bạn yêu cầu. Các dòng thứ hai xóa bất kỳ khoảng thời gian nào không có giá trị (tức là 0 tháng) và xóa chúng khỏi chuỗi. Dòng thứ ba lấy bất kỳ khoảng thời gian nào có một giá trị (tức là 1 tháng) và cắt bớt 's' không cần thiết ở cuối (tức là 1 tháng trở thành 1 tháng).