2013-05-27 40 views
21

Tôi đang cố gắng lấy giá trị "DateInterval" PHP trong giá trị "tổng phút". Làm thế nào để có được nó? Có vẻ như định dạng đơn giản ("% i phút") không hoạt động?nhận php DateInterval trong tổng số 'phút'

Đây là đoạn mã mẫu:

$test = new \DateTime("48 hours"); 
$interval = $test->diff(new \DateTime()); 

Bây giờ nếu tôi cố gắng để có được những khoảng thời gian trong tổng số ngày, tiền phạt của nó:

echo $interval->format('%a total days'); 

Nó đang hiển thị 2 ngày, kể ra, đó là hoàn toàn khỏe. Những gì tôi đang cố gắng để có được để có được giá trị trong "tổng số phút", vì vậy tôi đã thử:

echo $interval->format('%i total minutes'); 

Không hoạt động. Bất kỳ trợ giúp đánh giá cao để có được sản lượng mong muốn của tôi.

+1

Bạn có thể hiển thị một số mã thực tế hơn không? Ví dụ. initialisation, usage, vv –

+0

Tôi không nghĩ rằng nó có thể là một quy tắc chung. Nếu khoảng thời gian là 'một tháng' thì sao? –

+0

Vui lòng đăng mã của bạn – edwardmp

Trả lời

46
abs((new \DateTime("48 hours"))->getTimestamp() - (new \DateTime)->getTimestamp())/60 

Đó là cách dễ nhất để có được sự khác biệt về phút giữa hai trường hợp DateTime.

+0

Cảm ơn. Tôi cũng đã tìm ra điều này với nhận xét của kẻ lừa dối. Cảm ơn bạn đã đăng giải pháp hoàn chỉnh. – Rana

+14

Vâng, đó là kẻ lừa dối, anh ấy tuyệt vời ...; o) – deceze

+1

Tôi đã bỏ lỡ đó là bạn: D – Rana

8

Nếu bạn bị kẹt ở vị trí mà tất cả những gì bạn có là DateInterval và bạn (như tôi) phát hiện ra rằng dường như không có cách nào để có tổng số phút, giây hoặc bất kỳ khoảng thời gian nào, giải pháp là tạo ra một DateTime tại không thời gian, thêm khoảng đến nó, và sau đó nhận được dấu thời gian dẫn:

$timeInterval  = //the DateInterval you have; 
$intervalInSeconds = (new DateTime())->setTimeStamp(0)->add($timeInterval)->getTimeStamp(); 
$intervalInMinutes = $intervalInSeconds/60; // and so on 
4

tôi đã viết hai chức năng mà chỉ tính toán totalTime từ một DateInterval. Độ chính xác có thể tăng lên theo năm và tháng.

function getTotalMinutes(DateInterval $int){ 
    return ($int->d * 24 * 60) + ($int->h * 60) + $int->i; 
} 

function getTotalHours(DateInterval $int){ 
    return ($int->d * 24) + $int->h + $int->i/60; 
} 
+0

Bạn có thể sử dụng '$ int-> days * 24' để bao gồm các tháng hoặc năm trước đó trong phép tính. – fyrye

2

Điều đó hoạt động hoàn hảo.

function calculateMinutes(DateInterval $int){ 
    $days = $int->format('%a'); 
    return ($days * 24 * 60) + ($int->h * 60) + $int->i; 
} 
Các vấn đề liên quan