2009-10-05 57 views

Trả lời

55

Bạn có thể sử dụng strtotime() để làm điều đó:

$diff = strtotime('2009-10-05 18:11:08') - strtotime('2009-10-05 18:07:13') 
+0

Lưu ý: Đảm bảo bạn sử dụng vốn "H" cho giờ (chế độ 24h) khi thời gian "thấp hơn" của bạn là "bây giờ" và bạn sử dụng 'date()' để có được datetime của bây giờ ('ngày (" Ymd H: i: s ")'). –

2
strtotime("2009-10-05 18:11:08") - strtotime("2009-10-05 18:07:13") 
7

PHP Ngày Thời gian tham khảo rất hữu ích cho những thứ như thế này: PHP Date Time Functions

strtotime() có lẽ là cách tốt nhất.

$seconds = strtotime('2009-10-05 18:11:08') - strtotime('2009-10-05 18:07:13') 
107

Với đối tượng DateTime, bạn có thể làm điều đó như thế này:

$date = new DateTime('2009-10-05 18:07:13'); 
$date2 = new DateTime('2009-10-05 18:11:08'); 

$diffInSeconds = $date2->getTimestamp() - $date->getTimestamp(); 
+0

Điều này cũng tính đến thời gian tiết kiệm ánh sáng ban ngày! – Brainware

+0

Đây là giải pháp thanh lịch nhất cho câu hỏi. Đây sẽ là câu trả lời được chấp nhận. –

4

Do hạn chế của thời đại unix, bạn có thể có vấn đề compairing ngày trước 1970 và sau 2038. Tôi chọn để mất chính xác (= không nhìn vào thứ hai duy nhất) nhưng tránh để vượt qua trough unix chuyển đổi epoch (getTimestamp). Tùy thuộc vào việc bạn đang làm ...

Trong trường hợp của tôi, sử dụng 365 thay vì (12 * 30) và "30" làm chiều dài tháng trung bình, giảm lỗi trong đầu ra có thể sử dụng.

function DateIntervalToSec($start,$end){ // as datetime object returns difference in seconds 
    $diff = $end->diff($start); 
    $diff_sec = $diff->format('%r').(// prepend the sign - if negative, change it to R if you want the +, too 
       ($diff->s)+ // seconds (no errors) 
       (60*($diff->i))+ // minutes (no errors) 
       (60*60*($diff->h))+ // hours (no errors) 
       (24*60*60*($diff->d))+ // days (no errors) 
       (30*24*60*60*($diff->m))+ // months (???) 
       (365*24*60*60*($diff->y)) // years (???) 
       ); 
    return $diff_sec; 
} 

Lưu ý rằng lỗi có thể là 0, nếu "có nghĩa là" đại lượng được dự định cho khác biệt. Các tài liệu PHP không nói về vấn đề này ... Trong trường hợp xấu, lỗi có thể là:

  • 0 giây nếu diff được áp dụng cho những khoảng trống thời gian < 1 tháng
  • 0-3 ngày nếu diff là áp dụng cho những khoảng trống thời gian> 1 tháng
  • 0-14 ngày nếu diff được áp dụng cho những khoảng trống thời gian> 1 năm

tôi thích để giả định rằng ai đó quyết định xem xét "m" như 30 ngày và "y" như 365, sạc "d" với sự khác biệt khi "diff" đi bộ trough tháng không 30 ngày ...

Nếu ai đó biết thêm về điều này và có thể cung cấp tài liệu chính thức, được hoan nghênh!

+0

Sử dụng thuộc tính ngày thay vì thuộc tính d để có được ngày chính xác giữa hai ngày. Vì vậy, không có kết quả không chính xác ở đó. – Nilz11

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