Thuật toán được mô tả như sau :
- Dùng hàm strtotime() để tính ra số giây được tính từ thời điểm 01/01/1970 00:00:00 GMT đến hiện tại của 2 ngày được nhập vào.
- Dùng hàm abs() để lấy giá trị tuyệt đối của hiệu 2 ngày đó (vì không biết ngày nào lớn hơn).
- Lấy kết quả chia cho tổng số giây trong 1 ngày (24 x 60 x 60 = 86400).
- Cuối cùng sử dụng hàm floor() để làm tròn số ngày trả về.
Và đây là đoạn code:
|
|
<?php
$first_date = strtotime('2012-07-11');
$second_date = strtotime('2012-07-14');
$datediff = abs($first_date - $second_date);
echo floor($datediff / (60*60*24));
?>
|
Kết quả:
2) Lấy kết quả trả về theo định dạng ngày, tháng, năm
Các bạn có thể thấy kết quả trả về của đoạn code ở trên là khoảng
cách (số ngày) giữa 2 ngày nhập vào. Câu hỏi đặt ra làm thế nào tính
chính xác khoảng cách đó ra ngày, tháng, năm. Nói một cách dễ hiểu là,
giả sử tôi nhập vào 2 ngày là 01/01/2012 và 04/05/2014. Vậy hai ngày đó
cách nhau bao nhiêu năm, tháng và ngày ?
a, Cách 1
|
|
<?php
$date1 = "2012-03-24";
$date2 = "2012-03-26";
$diff = abs(strtotime($date2) - strtotime($date1));
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
echo $years . " years, " . $months . " months, " . $days . " days";
?>
|
b, Cách 2 (Đoạn code này chỉ áp dụng cho PHP 5.3+)
|
|
<?php
$date1 = new DateTime("2012-03-24");
$date2 = new DateTime("2012-03-26");
$interval = $date1->diff($date2);
echo $interval->y . " years, " . $interval->m . " months, " . $interval->d . " days ";
?>
|
Và kết quả
|
|
0 years, 0 months, 2 days
|
3) Lấy kết quả trả về theo định dạng ngày, tháng, năm, giờ, phút, giây
Tương tự như vậy, đoạn code dưới đây sẽ tính chính xác khoảng cách giữa 2 ngày ra định dạng ngày, tháng, năm, giờ, phút, giây.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<?php
$date1 = "2008-11-01 22:45:00";
$date2 = "2009-12-04 13:44:01";
$diff = abs(strtotime($date2) - strtotime($date1));
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24) / (60*60*24));
$hours = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24) / (60*60));
$minutes = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60) / 60);
$seconds = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60 - $minutes*60));
echo $years." years, ".$months." months, ".$days." days, ".$hours." hours, ".$minutes." minutes, ".$seconds." seconds";
?>
|
Và kết quả
|
|
1 years, 1 months, 2 days, 14 hours, 59 minutes, 1 seconds
|
link web:
http://tanvietblog.com/2012/07/15/php-tinh-khoang-cach-giua-2-ngay-bat-ky
Không có nhận xét nào:
Đăng nhận xét