Tôi quyết định thêm bài đăng rất đơn giản này để minh họa cách chúng ta có thể lấy thời gian hiện tại tính bằng micro giây, mili giây và nano giây sau đó chuyển đổi chúng trở lại thời gian hiện tại
Ví dụ
// MILLISECONDS
$currentMilliSecond = [int] [microtime[true] * 1000];
echo 'CUR MILLISECONDS:'.$currentMilliSecond.PHP_EOL;
echo 'DATE:'.date['d/m/Y H:i:s', intval[$currentMilliSecond/1000]].PHP_EOL;// MICROSECONDS
$currentMicroSecond = [int] [microtime[true] * 1000000];
echo 'CUR MICROSECONDS:'.$currentMicroSecond.PHP_EOL;
echo 'DATE:'.date['d/m/Y H:i:s', intval[$currentMicroSecond/1000000]].PHP_EOL;// NANOSECONDS
$currentNanoSecond = [int] [microtime[true] * 1000000000];
echo 'CUR NANOSECONDS:'.$currentNanoSecond.PHP_EOL;
echo 'DATE:'.date['d/m/Y H:i:s', intval[$currentNanoSecond/1000000000]].PHP_EOL;
Kết quả
CUR MILLISECONDS:1523390684112
DATE:10/04/2018 16:04:44CUR MICROSECONDS:1523390684112993
DATE:10/04/2018 16:04:44CUR NANOSECONDS:1523390684113001984
DATE:10/04/2018 16:04:44
Không có hàm PHP riêng để ngủ trong một phần nghìn giây và bạn cũng không thể sử dụng các giá trị phân số trong hàm ngủ, vì vậy, thay vào đó, bạn sẽ cần tạo hàm của riêng mình;
Ghi chú. Một micro giây là một phần triệu giây
Để đến phần nghìn giây, bạn nhân với 1000
function m_sleep[$milliseconds] { return usleep[$milliseconds * 1000]; // Microseconds->milliseconds }
Nhân với 1000 khác sẽ đưa bạn đến giây
return usleep[$seconds * 1000 * 1000]; // Microseconds->milliseconds->seconds
Điều này không cần thiết, vì bạn đã có chức năng sleep[] để ngủ trong vài giây — vì vậy, hãy thử sử dụng mili giây ngay bây giờ
Để làm mọi việc dễ dàng hơn, bạn có thể tạo một chức năng mà bạn có thể gọi khi cần
m_sleep[5000]; // 5000 milliseconds = 5 seconds function m_sleep[$milliseconds] { return usleep[$milliseconds * 1000]; // Microseconds->milliseconds }
Ngủ trong nửa giây
Bạn có thể sử dụng chức năng từ trước để làm cho tập lệnh ngủ trong nửa giây. Biết rằng một nghìn mili giây là một giây, theo logic, nửa giây là 0. 5 lần giá trị này — năm trăm;
echo "Start\n\n"; m_sleep[500]; // 500 milliseconds = 0.5 seconds echo "0.5 seconds has now passed. Exiting."; exit[];
Bảng chuyển đổi thời gian
Tôi nghĩ bạn có thể thấy bảng này hữu ích, vì không phải ai cũng nhớ các định nghĩa tiếng Anh tương ứng với số nguyên là gì – và ai trách bạn?
❮ Tham chiếu ngày/giờ PHP
Ví dụ
Trả lại dấu thời gian Unix hiện tại bằng micro giây
echo[microtime[]];
?>
Định nghĩa và cách sử dụng
Hàm microtime[] trả về dấu thời gian Unix hiện tại bằng micro giây
cú pháp
Giá trị tham số
Tham sốMô tảreturn_floatTùy chọn. Khi được đặt thành TRUE, nó chỉ định rằng hàm sẽ trả về một số float, thay vì một chuỗi. Mặc định là SAIchi tiết kỹ thuật
Giá trị trả về. Trả về chuỗi "microsec sec" theo mặc định, trong đó sec là số giây kể từ Unix Epoch [0. 00. 00 ngày 1 tháng 1 năm 1970 GMT] và microsec là phần micro giây. Nếu tham số return_float được đặt thành TRUE, nó sẽ trả về một số float biểu thị thời gian hiện tại tính bằng giây kể từ kỷ nguyên Unix chính xác đến micro giây gần nhất Phiên bản PHP. 4+Nhật ký thay đổi PHP. PHP5. 0. Đã thêm tham số return_float❮ Tham chiếu ngày/giờ PHPNếu bạn muốn một hàm tương đương của
function milliseconds[] {
$mt = explode[' ', microtime[]];
return intval[ $mt[1] * 1E3 ] + intval[ round[ $mt[0] * 1E3 ] ];
}
0 tính bằng mili giây, trước tiên bạn phải xem xét rằng vì function milliseconds[] {
$mt = explode[' ', microtime[]];
return intval[ $mt[1] * 1E3 ] + intval[ round[ $mt[0] * 1E3 ] ];
}
0 trả về số giây đã trôi qua kể từ "thời gian kỷ nguyên" [01/01/1970], số mili giây kể từ "thời gian kỷ nguyên" là một Kích thước của một số nguyên trong PHP có thể là 32 hoặc 64 bit tùy thuộc vào nền tảng
từ http. //php. net/manual/vi/ngôn ngữ. các loại. số nguyên. php
Kích thước của một số nguyên phụ thuộc vào nền tảng, mặc dù giá trị tối đa khoảng hai tỷ là giá trị thông thường [đó là 32 bit được ký]. Nền tảng 64 bit thường có giá trị tối đa khoảng 9E18, ngoại trừ Windows luôn là 32 bit. PHP không hỗ trợ số nguyên không dấu. Kích thước số nguyên có thể được xác định bằng cách sử dụng hằng số PHP_INT_SIZE và giá trị tối đa bằng cách sử dụng hằng số PHP_INT_MAX kể từ PHP 4. 4. 0 và PHP5. 0. 5
Nếu bạn có số nguyên 64 bit thì bạn có thể sử dụng chức năng sau
function milliseconds[] {
$mt = explode[' ', microtime[]];
return intval[ $mt[1] * 1E3 ] + intval[ round[ $mt[0] * 1E3 ] ];
}
function milliseconds[] {
$mt = explode[' ', microtime[]];
return intval[ $mt[1] * 1E3 ] + intval[ round[ $mt[0] * 1E3 ] ];
}
2 trả về số giây kể từ "thời gian kỷ nguyên" với độ chính xác lên đến micro giây với hai số được phân tách bằng dấu cách, nhưCUR MILLISECONDS:15233906841120
DATE:10/04/2018 16:04:44CUR MICROSECONDS:1523390684112993
DATE:10/04/2018 16:04:44CUR NANOSECONDS:1523390684113001984
DATE:10/04/2018 16:04:44
Số thứ hai là giây [số nguyên] trong khi số thứ nhất là phần thập phân
Hàm trên
function milliseconds[] {
$mt = explode[' ', microtime[]];
return intval[ $mt[1] * 1E3 ] + intval[ round[ $mt[0] * 1E3 ] ];
}
3 lấy phần nguyên nhân với function milliseconds[] {
$mt = explode[' ', microtime[]];
return intval[ $mt[1] * 1E3 ] + intval[ round[ $mt[0] * 1E3 ] ];
}
4CUR MILLISECONDS:15233906841123
DATE:10/04/2018 16:04:44CUR MICROSECONDS:1523390684112993
DATE:10/04/2018 16:04:44CUR NANOSECONDS:1523390684113001984
DATE:10/04/2018 16:04:44
sau đó thêm phần thập phân nhân với
function milliseconds[] {
$mt = explode[' ', microtime[]];
return intval[ $mt[1] * 1E3 ] + intval[ round[ $mt[0] * 1E3 ] ];
}
4 và làm tròn thành 0 số thập phânCUR MILLISECONDS:15233906841125
DATE:10/04/2018 16:04:44CUR MICROSECONDS:1523390684112993
DATE:10/04/2018 16:04:44CUR NANOSECONDS:1523390684113001984
DATE:10/04/2018 16:04:44
Lưu ý rằng cả ________ 66 và kết quả của ________ 67 đều được chuyển thành ________ 68 qua
function milliseconds[] {
$mt = explode[' ', microtime[]];
return intval[ $mt[1] * 1E3 ] + intval[ round[ $mt[0] * 1E3 ] ];
}
9. Điều này là cần thiết vì chúng là những CUR MILLISECONDS:152339068411200 và thao tác trên chúng mà không ép kiểu sẽ dẫn đến việc hàm trả về một
DATE:10/04/2018 16:04:44CUR MICROSECONDS:1523390684112993
DATE:10/04/2018 16:04:44CUR NANOSECONDS:1523390684113001984
DATE:10/04/2018 16:04:44
CUR MILLISECONDS:152339068411200 bị mất độ chính xác
DATE:10/04/2018 16:04:44CUR MICROSECONDS:1523390684112993
DATE:10/04/2018 16:04:44CUR NANOSECONDS:1523390684113001984
DATE:10/04/2018 16:04:44
Cuối cùng, chức năng đó chính xác hơn một chút so với
function m_sleep[$milliseconds] { return usleep[$milliseconds * 1000]; // Microseconds->milliseconds }2
với tỉ lệ 1. 10 [xấp xỉ. ] trả về nhiều hơn 1 mili giây so với kết quả chính xác. Điều này là do độ chính xác hạn chế của loại float [_______102 trả về một float]. Dù sao nếu bạn vẫn thích
CUR MILLISECONDS:152339068411203 ngắn hơn thì tôi khuyên bạn nên chuyển sang kết quả là
DATE:10/04/2018 16:04:44CUR MICROSECONDS:1523390684112993
DATE:10/04/2018 16:04:44CUR NANOSECONDS:1523390684113001984
DATE:10/04/2018 16:04:44
function milliseconds[] {
$mt = explode[' ', microtime[]];
return intval[ $mt[1] * 1E3 ] + intval[ round[ $mt[0] * 1E3 ] ];
}
8Ngay cả khi nó nằm ngoài phạm vi của câu hỏi, điều đáng nói là nếu nền tảng của bạn hỗ trợ số nguyên 64 bit thì bạn cũng có thể nhận được thời gian hiện tại tính bằng micro giây mà không bị tràn
Nếu thực tế ____105 [số nguyên có dấu lớn nhất] chia cho ____106 [xấp xỉ micro giây trong một năm] sẽ cho ____107
Đó là cùng một giá trị bạn nhận được với
function m_sleep[$milliseconds] { return usleep[$milliseconds * 1000]; // Microseconds->milliseconds }9
Nói cách khác, một số nguyên 64 bit đã ký có chỗ để lưu trữ khoảng thời gian hơn 200.000 năm được đo bằng micro giây