time()
в секундах - есть ли в миллисекундах?
php
time
milliseconds
пришелец
источник
источник
time()
.microtime(true)
с другой стороны, возвращает текущее время в секундах с начала эпохи Unix с точностью до ближайшей микросекунды (см. справку по PHP). На самом деле очень легко проверить, запускаете ли вы вышеуказанный код в цикле и отображаете миллисекунды.microtime(true) / 1000
Разве это не должно быть (деление вместо умножения)?Использование
microtime
. Эта функция возвращает строку, разделенную пробелом. Первая часть является дробной частью секунды, вторая часть является неотъемлемой частью. Пройдите,true
чтобы получить номер:Остерегайтесь потери точности, если вы используете
microtime(true)
.Существует также,
gettimeofday
что возвращает часть микросекунд в виде целого числа.источник
microtime()
равно1000*time()
, верно?1000
, верно?microtime(true)
и1000*time()
1000*time()
не даст вам миллисекунд.microtime(true)
возвращает a,float
который имеет 14 цифр точности. Секция секунд уже заняла 10, так что осталось 4 цифры для части микросекунд. Этого должно быть достаточно, поскольку миллисекунды требуют только 3 дополнительных цифры.Короткий ответ:
Только 64-битные платформы!
[ Если вы используете 64-битный PHP, то константа
PHP_INT_SIZE
равна8
]Длинный ответ:
Если вы хотите сначала получить эквивалентную функцию
time()
в миллисекундах, вы должны учитывать, что astime()
возвращает число секунд, прошедших с «времени эпохи» (01.01.1970), а число миллисекунд с «времени эпохи» - большое число. и не вписывается в 32-битное целое число.Размер целого числа в PHP может быть 32 или 64 бит в зависимости от платформы.
От http://php.net/manual/en/language.types.integer.php
Если у вас 64-разрядные целые числа, вы можете использовать следующую функцию:
microtime()
возвращает количество секунд с «эпохального времени» с точностью до микросекунд с двумя числами, разделенными пробелом, например ...Второе число - это секунды (целое число), а первое - десятичная часть.
Вышеуказанная функция
milliseconds()
принимает целую часть, умноженную на1000
затем добавляет десятичную часть, умноженную на 0
1000
и округленную до 0Обратите внимание, что оба
$mt[1]
и результатround
приведены кint
. Это необходимо, потому что ониfloat
s и операция с ними без приведения приведет к тому, что функция вернет afloat
.Наконец, эта функция немного точнее, чем
что с соотношением 1:10 (прибл.) возвращает на 1 миллисекунду больше, чем правильный результат. Это связано с ограниченной точностью типа с плавающей точкой (
microtime(true)
возвращает значение с плавающей точкой). В любом случае, если вы по-прежнему предпочитаете более короткое,round(microtime(true)*1000);
я бы предложилint
использовать результат.Даже если это выходит за рамки вопроса, стоит упомянуть, что, если ваша платформа поддерживает 64-битные целые числа, вы также можете получить текущее время в микросекундах без переполнения.
Если факт
2^63 - 1
(наибольшее целое число со знаком), поделенное на10^6 * 3600 * 24 * 365
(приблизительно микросекунды в течение одного года) дает292471
.Это то же значение, которое вы получаете с
Другими словами, 64-разрядное целое число со знаком может хранить промежуток времени более 200 000 лет, измеренный в микросекундах.
Вы можете иметь тогда
источник
Как уже говорилось, вы можете использовать
microtime()
для получения миллисекундной точности на временных метках.Судя по вашим комментариям, вы хотите использовать его как высокоточную метку времени UNIX. Нечто подобное
DateTime.Now.Ticks
в мире .NET.Для этого вы можете использовать следующую функцию:
источник
Используйте
microtime(true)
в PHP 5 или следующую модификацию в PHP 4:Портативный способ написания этого кода:
источник
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']) . $t['usec'];
$timeofday=gettimeofday(); echo sprintf("%s.%06d", date('Y-m-d H:i:s', $timeofday['sec']), $timeofday['usec']);
попробуй это:
источник
Это работает, даже если вы используете 32-битный PHP:
Обратите внимание, что это не целые числа, а строки. Однако во многих случаях это работает нормально, например, при создании URL-адресов для запросов REST.
Если вам нужны целые числа, 64-битный PHP обязателен.
Затем вы можете повторно использовать приведенный выше код и привести к (int):
Или вы можете использовать хорошие старые строки:
источник
Надеюсь, это поможет вам.
источник
источник
PHP 5.2.2 <
PHP 7.0.0 <7.1
источник
Использовать это:
до свидания
источник