2009-12-21 41 views
77

Có cách nào nhanh chóng để tính chênh lệch ngày trong php không? Ví dụ:Sự khác biệt ngày trong php vào ngày?

$date1 = '2009-11-12 12:09:08'; 
$date2 = '2009-12-01 08:20:11'; 

Và sau đó làm một phép tính, $ date2 trừ $ date1

Tôi đọc tài liệu php.net, nhưng không có may mắn. Có cách nào nhanh chóng để làm điều đó không?

+0

@kiamlaluno - đó không phải là một * chính xác * trùng lặp, vì nó là một việc tốt phức tạp hơn (OP trong câu hỏi đó muốn ngày được định dạng như trong "x năm, y tháng, z ngày" vv). –

+0

Tôi muốn trong "ngày" :) – mysqllearner

Trả lời

43

strtotime sẽ chuyển đổi chuỗi ngày của bạn thành dấu thời gian unix. . (Giây kể từ khi kỷ nguyên unix

$ts1 = strtotime($date1); 
$ts2 = strtotime($date2); 

$seconds_diff = $ts2 - $ts1; 
+11

xin lưu ý rằng điều này có thể cung cấp cho bạn kết quả khác nhau nếu giữa 2 ngày có thay đổi thời gian (như vào mùa xuân hoặc mùa thu). thử điều này: echo strtotime ('2013-03-30 21:00') - strtotime ('2013-03-29 21:00'); echo strtotime ('2013-03-31 21:00') - strtotime ('2013-03-30 21:00'); bạn nhận được 86400 và 82800. kết quả thực sự chính xác. nhưng nếu bạn chia cho 86400 để có được số ngày bạn cần phải tính đến điều đó (nên sử dụng chức năng ngày tháng khác tốt hơn). – memical

+2

Nếu bạn đang sử dụng phiên bản php hiện đại, hãy sử dụng giải pháp của adam. PHP có rất nhiều mã để giải thích cho các bất thường liên quan đến thời gian. – txyoji

161

tôi sẽ khuyên bạn nên sử dụng date-> diff chức năng, như trong ví dụ dưới đây:

$dStart = new DateTime('2012-07-26'); 
    $dEnd = new DateTime('2012-08-26'); 
    $dDiff = $dStart->diff($dEnd); 
    echo $dDiff->format('%R'); // use for point out relation: smaller/greater 
    echo $dDiff->days; 

thấy http://www.php.net/manual/en/datetime.diff.php

+2

Chức năng này yêu cầu php 5.3 hoặc tốt hơn như đã nêu bởi @txyoji – levhita

+13

sử dụng định dạng '$ diffInDays = (int) $ dDiff-> ("% r% a ");' để lấy các giá trị bạn có thể sử dụng trực tiếp như "-2" hoặc "2" (xem http://www.php.net/manual/en/dateinterval.format.php để biết mô tả tham số định dạng) – flu

+0

Và thay đổi "-" thành ":" nếu bạn gặp tai nạn hoặc không cố gắng hẹn hò với thời gian ... –

13

Dưới mã sẽ cung cấp cho các sản lượng cho số ngày, bằng cách lấy ra sự khác biệt giữa hai ngày ..

$str = "Jul 02 2013"; 
$str = strtotime(date("M d Y ")) - (strtotime($str)); 
echo floor($str/3600/24); 
+0

Khi cố gắng để tính toán sự khác biệt ngày cho 'ngày tháng JQuery' của tôi,' tầng' đã cho tôi kết quả lạ. Ví dụ, 'floor ((strtotime (((isset ($ _ POST ['date']) và strtotime ($ _ POST ['date']))? $ _POST ['date']: date (" Ymd "))) - strtotime (ngày ("Ymd")))/3600/24)) 'cho tôi một sự khác biệt của 9.9583333333333 giữa ngày 31 tháng 3 và ngày 21 tháng 3 (vì vậy 9 với làm tròn xuống khi tôi mong đợi 10). Tôi đã sử dụng hàm 'round' để giải quyết vấn đề. –

+0

Có Jonathan, Bạn nói đúng. –

Các vấn đề liên quan