[PHP] Tính khoảng cách giữa 2 ngày bất kỳ
Bài viết hôm nay sẽ giải quyết câu hỏi làm thế nào tính được khoảng cách giữa 2 ngày bất kỳ và lấy kết quả trả về theo các mục đích khác nhau.
1) Tính khoảng cách giữa 2 ngày
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:
signax.ae - bim construction meaning. Best indianapolis marble countertops indianapolis granitedepotindy.com.
<?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ả:
3
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.
<?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
Hi vọng bài viết này giúp ích cho các bạn. Thân ái!
anh ơi! giúp e với ạ, e có 1 bài toán thế này
Nhập 1 ngày hiện tại: thời gian lưu trữ: 20/09/2013
1 selectbox bao gồm các giá trị: thời gian bảo quản:10 năm, 20 năm, 50 năm, 6 tháng
bây giờ em muốn tính được số ngày còn lại của 1 bộ hồ sơ đó là bao nhiêu ngày thì tính thế nào ạ
e tính là (thời gian bảo quản-(thời gian hiện tại — thời gian lưu trữ))
cái này có đúng với năm 366 ngày không?