time()
находится в секундах - есть ли один миллисекунды?Как получить текущее время в миллисекундах в PHP?
ответ
Use microtime()
. Эта функция возвращает строку, разделенную пробелом. Первая часть - дробная часть секунд, вторая часть - неотъемлемая часть. Проходят в true
, чтобы получить как номер:
var_dump(microtime()); // string(21) "0.89115400 1283846202"
var_dump(microtime(true)); // float(1283846202.89)
Остерегайтесь потери точности, если вы используете microtime(true)
.
There is also gettimeofday()
, который возвращает часть микросекунд как целое число.
var_dump(gettimeofday());
/*
array(4) {
["sec"]=>
int(1283846202)
["usec"]=>
int(891199)
["minuteswest"]=>
int(-60)
["dsttime"]=>
int(1)
}
*/
Как другие заявляли, вы можете использовать microtime()
, чтобы получить точность миллисекунды на временные метки.
Из ваших комментариев вы, похоже, хотите, чтобы это была высокоточная отметка времени UNIX. Что-то вроде DateTime.Now.Ticks
в мире .NET.
Вы можете использовать следующую функцию, чтобы сделать так:
function millitime() {
$microtime = microtime();
$comps = explode(' ', $microtime);
// Note: Using a string here to prevent loss of precision
// in case of "overflow" (PHP converts it to a double)
return sprintf('%d%03d', $comps[1], $comps[0] * 1000);
}
Использование microtime(true)
в PHP 5 или следующей модификации в PHP 4:
array_sum(explode(' ', microtime()));
переносимый способ, чтобы написать этот код будет быть:
function getMicrotime()
{
if (version_compare(PHP_VERSION, '5.0.0', '<'))
{
return array_sum(explode(' ', microtime()));
}
return microtime(true);
}
короткий ответ является:
$milliseconds = round(microtime(true) * 1000);
@FredrikWendt, я думаю, вы сбиваете с толку 'time()'. 'microtime (true)', с другой стороны, возвращает текущее время в секундах с эпохи Unix с точностью до ближайшей микросекунды (см. ссылку PHP). На самом деле очень легко проверить, выполняете ли вы вышеуказанный код в цикле и показываете миллисекунды. –
Я абсолютно сделал! :-) –
Мне нравится короткий ответ. –
Используйте это:
function get_millis(){ list($usec, $sec) = explode(' ', microtime()); return (int) ((int) $sec * 1000 + ((float) $usec * 1000)); }
Bye
Короткий ответ: только
64 бит платформы!
function milliseconds() {
$mt = explode(' ', microtime());
return ((int)$mt[1]) * 1000 + ((int)round($mt[0] * 1000));
}
Длинный ответ:
Если вы хотите функцию equilvalent из time()
в миллисекундах первом вы должны учитывать, что, как time()
возвращает количество секунд, прошедшее с момента «времени эпохи «(01.01.1970), число миллисекунд, так как« время эпохи »является большим числом и не вписывается в 32-битное целое число.
Размер целого числа в PHP может быть 32 или 64 бит в зависимости от платформы.
От http://php.net/manual/en/language.types.integer.php
размера целого зависит от платформы, хотя максимальное значение около двух миллиардов обычного значения (это 32-битных знакового). 64-разрядные платформы обычно имеют максимальное значение около 9E18, за исключением Windows, которая всегда 32 бит. PHP не поддерживает целые числа без знака. Целочисленный размер может быть определен с использованием константы PHP_INT_SIZE и максимального значения с использованием константы PHP_INT_MAX с PHP 4.4.0 и PHP 5.0.5.
Если у вас есть 64-битные целые числа, то вы можете использовать следующие функции:
function milliseconds() {
$mt = explode(' ', microtime());
return ((int)$mt[1]) * 1000 + ((int)round($mt[0] * 1000));
}
microtime()
возвращает количество секунд с момента «времени эпохи» с точностью до микросекунд с двумя числами, разделенными пространством , как ...
0.90441300 1409263371
Второе число представляет собой секунды (целое число), превалирующее десятичную часть.
Функция milliseconds
взять целую часть, умноженную на 1000
1409263371000
и добавляет дробная часть умножается на 1000
и округлена до 0 знаков после запятой
1409263371904
Обратите внимание, что оба $mt[1]
и результат round
отливают до int
. Это необходимо, потому что они float
с, и работа над ними без литья приведет к возврату функции float
.
Наконец, эта функция является немного более точным, чем
round(microtime(true)*1000);
, что при соотношении 1:10 (прибл.) Возвращает больше 1 миллисекунду, чем правильный результат. Это связано с ограниченной точностью поплавкового типа (microtime(true)
возвращает поплавок). В любом случае, если вы все еще предпочитаете короткое round(microtime(true)*1000);
Я бы предпочел бы отличить от int
результат.
Даже если это выходит за рамки вопроса, стоит упомянуть, что если ваша платформа поддерживает 64-битные целые числа, то вы можете также получить текущее время в микросекундах, не подвергаясь при переполнении.
Если факт 2^63
(приблизительное целое число со знаком), деленное на 10^6 * 3600 * 24 * 365
(около микросекунды в год), прибл. 292471
.
Это то же самое значение, возвращенное echo PHP_INT_MAX/(1000000*3600*24*365);
Другими словами подписанную целое есть место для хранения в отрезок времени более 200 тысяч лет, измеренный в микросекундах.
Вы можете иметь того
function microseconds() {
$mt = explode(' ', microtime());
return ((int)$mt[1]) * 1000000 + ((int)round($mt[0] * 1000000));
}
Почему не просто: '' функция getMilliEpoch() { $ mt = explode ('', microtime()); return $ mt [1]. substr ($ mt [0], 0, 5) * 1000; } ' – Michael
$timeparts = explode(" ",microtime());
$currenttime = bcadd(($timeparts[0]*1000),bcmul($timeparts[1],1000));
echo $currenttime;
Примечание: PHP5 требуется для этой функции из-за улучшения с микропорой() и модулем Ьса математики также требуется (как мы имея дело с с большим количеством номеров, вы можете проверить, есть ли у вас модуль в phpinfo).
Надеюсь, это поможет вам.
$the_date_time = new DateTime($date_string);
$the_date_time_in_ms = ($the_date_time->format('U') * 1000) +
($the_date_time->format('u')/1000);
На самом деле это похоже на заполнение трех нулей справа? – Zeeshan
Совсем нет. Он преобразует обе части в миллисекунды и дает сумму. Так что это более точно, чем добавлять нули. – user3767296
Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. Также попробуйте не толковать код с пояснительными комментариями, что уменьшает читаемость кода и объяснений! –
попробовать это:
public function getTimeToMicroseconds() {
$t = microtime(true);
$micro = sprintf("%06d", ($t - floor($t)) * 1000000);
$d = new DateTime(date('Y-m-d H:i:s.' . $micro, $t));
return $d->format("Y-m-d H:i:s.u");
}
echo date('Y-m-d H:i:s.') . gettimeofday()['usec'];
выход:
2016-11-19 15:12:34.346351
Используется та же метка времени: '$ t = gettimeofday(); echo date ('Y-m-d H: i: s.', $ t ['sec']). $ Т [ 'мксек']; ' –
Это работает, даже если вы на 32-битной PHP:
list($msec, $sec) = explode(' ', microtime());
$time_milli = $sec.substr($msec, 2, 3); // '1491536422147'
$time_micro = $sec.substr($msec, 2, 6); // '1491536422147300'
Обратите внимание, что это не дает вам целые числа, а строки. Однако это хорошо работает во многих случаях, например, при создании URL-адресов для запросов REST.
Если вам нужны целые числа, 64-разрядный PHP является обязательным.
Затем вы можете использовать приведенный выше код и приведение к (межд):
list($msec, $sec) = explode(' ', microtime());
// these parentheses are mandatory otherwise the precedence is wrong!
// ↓ ↓
$time_milli = (int) ($sec.substr($msec, 2, 3)); // 1491536422147
$time_micro = (int) ($sec.substr($msec, 2, 6)); // 1491536422147300
Или вы можете использовать старые добрые Однострочники:
$time_milli = (int) round(microtime(true) * 1000); // 1491536422147
$time_micro = (int) round(microtime(true) * 1000000); // 1491536422147300
- 1. Как получить текущее время в миллисекундах?
- 2. Как получить текущее время в миллисекундах?
- 3. Текущее время в миллисекундах
- 4. Получить текущее время, в миллисекундах, в C?
- 5. Получить текущее системное время в миллисекундах
- 6. Текущее время в миллисекундах в MYSQL
- 7. Как получить текущее время в миллисекундах от C в Linux?
- 8. Как получить текущее время в миллисекундах в Loadrunner?
- 9. Как получить текущее время в миллисекундах в Фортране?
- 10. Как получить текущее время в миллисекундах от timepicker в android?
- 11. Windows: как получить текущее время в миллисекундах в C++?
- 12. Как получить текущее время воспроизведения, CMTime в миллисекундах в AVPlayer?
- 13. Как получить текущее время в миллисекундах в android
- 14. В Haxe, как получить текущее время в миллисекундах?
- 15. Как получить текущее системное время в миллисекундах или наносекундах?
- 16. Как получить текущее время в миллисекундах с помощью C?
- 17. Как получить текущее время в миллисекундах программирования C
- 18. moment.js получает текущее время в миллисекундах?
- 19. Как получить время в миллисекундах?
- 20. bash, получить текущее время в миллисекундах с полуночи
- 21. сравнивая текущее время в миллисекундах сэкономленного время в общих настройках
- 22. Как вы получаете текущее время в миллисекундах (длинные), в VB.Net?
- 23. Получить текущее время Миллисекунды
- 24. Как преобразовать время в миллисекундах в php
- 25. Дата в миллисекундах в PHP
- 26. Время в миллисекундах Тревога
- 27. Время изменения файла PHP в миллисекундах
- 28. Текущее время в PHP
- 29. Как получить время, прошедшее в миллисекундах
- 30. Как получить время по Гринвичу в миллисекундах
Luck вопросы на SO также – prograshid
As часто бывает так, я думаю, что большинство из них будет **, потому что ** он спросил это, а не *** как *** он спросил об этом. –