2012-02-21 15 views
9

Làm thế nào để trừ microtime và ngày hiển thị bằng mili giây trong php?Làm thế nào để trừ microtime và ngày hiển thị bằng mili giây trong php?

Ví dụ: Tôi đã đặt ngày kết thúc và thời gian

$endtime = 2012-02-21 10:29:59; 

sau đó tôi có ngày hiện tại hoặc ngày bắt đầu với chuyển đổi từ microtime

$starttime = 2012-02-21 10:27:59.452; 

function getTimestamp() 
{ 
     $microtime = floatval(substr((string)microtime(), 1, 8)); 
     $rounded = round($microtime, 3); 
     return date("Y-m-d H:i:s") . substr((string)$rounded, 1, strlen($rounded)); 
} 

echo getTimestamp(); //sample output 2012-02-21 10:27:59.452 

Bây giờ tôi muốn trừ: $ finaldate = $ endtime - $ starttime;

Tôi muốn đầu ra của tôi là như thế này: 00: 00: 02,452

Trả lời

16

Bạn cần phải sử dụng microtime cho các giá trị bắt đầu/kết thúc, và chỉ định dạng nó để trưng bày ở cuối.

// Get the start time in microseconds, as a float value 
$starttime = microtime(true); 

/************/ 
/* Do stuff */ 
/************/ 

// Get the difference between start and end in microseconds, as a float value 
$diff = microtime(true) - $starttime; 

// Break the difference into seconds and microseconds 
$sec = intval($diff); 
$micro = $diff - $sec; 

// Format the result as you want it 
// $final will contain something like "00:00:02.452" 
$final = strftime('%T', mktime(0, 0, $sec)) . str_replace('0.', '.', sprintf('%.3f', $micro)); 

Lưu ý: đây là trở về giá trị float từ microtime và sử dụng số học float để đơn giản hóa các môn toán, do đó con số của bạn có thể rất nhẹ tắt do phao tròn vấn đề, nhưng bạn đang làm tròn kết quả đến 3 chữ số cuối cùng, và những dao động nhỏ trong thời gian xử lý lớn hơn lỗi dấu phẩy động, vì vậy đây không phải là vấn đề cho bạn ở nhiều cấp độ.

3

Vâng phpmyadmin sử dụng mã này như thế này để tính thời gian truy vấn. Điều này tương tự với yêu cầu của bạn:

//time before 
list($usec, $sec) = explode(' ',microtime($starttime)); 
$querytime_before = ((float)$usec + (float)$sec); 
/* your code */ 

//time after 
list($usec, $sec) = explode(' ',microtime($endtime)); 
$querytime_after = ((float)$usec + (float)$sec); 
$querytime = $querytime_after - $querytime_before; 

Tôi nghĩ điều này sẽ phù hợp với bạn. Bạn chỉ cần tìm định dạng đầu ra của mình

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