2015-07-04 19 views
9

Tôi muốn nhận được dấu thời gian hiện tại với mili giây trong PHP giống như dưới đây, trong JavaScript tôi sử dụng Date.now()Nhận timestamp hiện tại với mili giây

1436030635348 

tôi đã cố gắng một cái gì đó như dưới đây:

$time = str_replace(".","",microtime(true)); 

Nhưng đôi khi nó không hoạt động đúng cách. Giống như nó in một hoặc hai chữ số ít hơn.

+1

bạn cần dấu thời gian trong mili giây hoặc trong micro? tiêu đề nói một điều và câu hỏi thực tế khác là –

+0

nó là làm tròn vấn đề. Các giá trị 0 không được lặp lại, 'str_pad (str_replace (". "," ", Microtime (true)), 14, 0)' – splash58

+0

@AlexAndrei: xin lỗi tôi cần trong vài giây – Vishnu

Trả lời

9

Nó có thể in ít chữ số hơn, bởi vì nó là một giá trị float. Vì vậy, nếu bạn nhận được 1234.0005, thì `.0005 thực sự có nghĩa là 500 micro giây. Các số không sau 5 bị mất vì nó vẫn là giá trị float chưa được định dạng.

Chức năng microtime được dựa trên cuộc gọi hệ thống gettimeofday(), cũng không chính xác với micro giây. Thông thường nó chính xác đến 10 micro giây. Xem thêm Linux - Is gettimeofday() guaranteed to be of microsecond resolution.

-edit- Tôi thấy thông số đã thay đổi từ micro giây thành mili giây.

Để lấy giá trị float bạn có dưới dạng số nguyên, bạn có thể nhân với giá trị. Giá trị float đại diện cho giây. Nhân với 1000 để nhận được mili giây hoặc 1.000.000 để nhận được micro giây. Vì các thông số kỹ thuật (hiện tại) nói là mili giây, bạn nên nhân với 1000. 10k sẽ cho bạn độ chính xác 1/10ms = 100μs. Một phần nghìn giây là một phần nghìn giây. Một micro giây là một phần triệu giây.

dài truyện ngắn, để có được thời gian trong mili giây số nguyên, sử dụng này:

$milliseconds = round(microtime(true) * 1000); 

Lưu ý: có một lý do tại sao bạn nhận được thời gian như là một chuỗi hoặc một phao theo mặc định. Lý do là trên các hệ thống 32 bit, số nguyên của PHP cũng là 32 bit và không đủ lớn để chứa dấu thời gian bao gồm mili giây và micro giây. Vì vậy, giải pháp này sẽ chỉ hoạt động tốt trên hệ thống 64 bit.

+0

vì vậy làm thế nào tôi có thể giữ số không .. và bất kỳ hàm nào khác để có được dấu thời gian không có dấu thập phân? – Vishnu

+0

Thay vì thay thế '.' bạn có thể nhân với một triệu. – GolezTrol

+0

lol triệu hoặc 10k? 10k dường như hoạt động – Vishnu

0

Tôi nghĩ rằng bạn chỉ cần sử dụng chức năng này để có được một Timestamp với micro giây trong PHP:

int microtime (void) 

Sử dụng nó như trong link sau, sau đoạn mã cho bạn thấy làm thế nào tôi đã thay đổi nó theo thể hữu ích cho câu hỏi của bạn:

<?php 

function microtime_microseconds() 
{ 
    list($usec, $sec) = explode(" ", microtime()); 
    return round(($usec * 1000) + $sec); 
} 

$micro_time = microtime_microseconds(); 

echo $micro_time; 

?> 

và cũng để tham khảo liên quan đến chức năng mà microtime() PHP, vui lòng truy cập và đọc PHP manual page này.

+1

Đúng, hãy xem chức năng [microtime] của php (http://php.net/manual/en/function.microtime.php) – Ali

+1

@Ali cảm ơn Ali, tôi đã cập nhật câu trả lời theo gợi ý của bạn. –

+0

Đó là chức năng tương tự mà OP đang sử dụng. 'microtime' trả về một float hoặc một chuỗi. Không có int. Ví dụ w3schools bạn liên kết để sử dụng phiên bản chuỗi để trả về một phao. Đây là sự thay thế cho các phiên bản cũ của PHP không hỗ trợ 'get_as_float = true' làm tham số cho' microtime'. Vì vậy, câu trả lời này không giải quyết vấn đề của OP theo bất kỳ cách nào. – GolezTrol

1
$timeStampData = microtime(); 
list($msec, $sec) = explode(' ', $timeStampData); 
$msec = round($msec * 1000); 

$result = $sec . $msec; 

Something như thế này

Nhưng lưu ý, rằng js date.now() thời gian trở lại trong mili giây, không micro

+0

vì vậy làm thế nào để có được dấu thời gian trong mili giây trong php? – Vishnu

+0

yea i cần theo milli giây – Vishnu

+0

ví dụ ở trên cho biết cách tải xuống. nếu bạn muốn u nhận được dấu thời gian với micro giây - bạn nên thay đổi vòng này ($ msec * 1000) thành vòng ($ msec * 1000000) –

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