¿Cómo obtener la hora actual en milisegundos en PHP?

Resuelto COMer asked hace 54 años • 0 respuestas

time()está en segundos, ¿hay uno en milisegundos?

COMer avatar Jan 01 '70 08:01 COMer
Aceptado

La respuesta corta es:

$milliseconds = floor(microtime(true) * 1000);
laurent avatar Jul 11 '2012 02:07 laurent

Usar microtime. Esta función devuelve una cadena separada por un espacio. La primera parte es la parte fraccionaria de segundos, la segunda parte es la parte integral. Pase truepara obtener como un número:

var_dump(microtime());       // string(21) "0.89115400 1283846202"
var_dump(microtime(true));   // float(1283846202.89)

Tenga cuidado con la pérdida de precisión si usa microtime(true).

También existe gettimeofdayla posibilidad de que devuelva la parte de microsegundos como un número entero.

var_dump(gettimeofday());
/*
array(4) {
  ["sec"]=>
  int(1283846202)
  ["usec"]=>
  int(891199)
  ["minuteswest"]=>
  int(-60)
  ["dsttime"]=>
  int(1)
}
*/
kennytm avatar Sep 07 '2010 07:09 kennytm

Como han dicho otros, puede utilizarlo microtime()para obtener una precisión de milisegundos en las marcas de tiempo.

Según sus comentarios, parece que lo desea como una marca de tiempo UNIX de alta precisión. Algo así como DateTime.Now.Ticksen el mundo .NET.

Puede utilizar la siguiente función para hacerlo:

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);
}
Andrew Moore avatar Sep 07 '2010 08:09 Andrew Moore

Versión más corta de la variante de cadena (compatible con 32 bits):

$milliseconds = date_create()->format('Uv');
Milan Majer avatar Sep 17 '2021 07:09 Milan Majer