time()
es en segundos, ¿hay uno en milisegundos?
php
time
milliseconds
Contendiente
fuente
fuente
time()
.microtime(true)
Por otro lado, devuelve el tiempo actual en segundos desde la época de Unix con precisión al microsegundo más cercano (consulte la referencia de PHP). En realidad, es muy fácil probar si ejecuta el código anterior en un bucle y muestra los milisegundos.microtime(true) / 1000
(división en lugar de multiplicación)?Uso
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. Pasetrue
para obtener un número:Tenga cuidado con la pérdida de precisión si usa
microtime(true)
.También hay
gettimeofday
que devuelve la parte de microsegundos como un entero.fuente
microtime()
es igual1000*time()
, ¿verdad?1000
, ¿verdad?microtime(true)
y1000*time()
1000*time()
no te dará milisegundos.microtime(true)
devuelve unfloat
que tiene 14 dígitos de precisión. La parte de segundos ya tomó 10, por lo que dejó 4 dígitos para la parte de microsegundos. Esto debería ser suficiente ya que los milisegundos solo requieren 3 dígitos adicionales.Respuesta corta:
¡Solo plataformas de 64 bits!
[ Si está ejecutando PHP de 64 bits, entonces la constante
PHP_INT_SIZE
es igual a8
]Respuesta larga:
Si desea una función equivalente
time()
en milisegundos primero, debe tener en cuenta que, comotime()
devuelve el número de segundos transcurridos desde el "tiempo de época" (01/01/1970), el número de milisegundos desde el "tiempo de época" es un número grande y no cabe en un entero de 32 bits.El tamaño de un número entero en PHP puede ser de 32 o 64 bits, dependiendo de la plataforma.
De http://php.net/manual/en/language.types.integer.php
Si tiene enteros de 64 bits, puede usar la siguiente función:
microtime()
devuelve el número de segundos desde el "tiempo de época" con precisión hasta microsegundos con dos números separados por espacio, como ...El segundo número son los segundos (entero) mientras que el primero es la parte decimal.
La función anterior
milliseconds()
toma la parte entera multiplicada por1000
luego agrega la parte decimal multiplicada por
1000
y redondeada a 0 decimalesTenga en cuenta que ambos
$mt[1]
y el resultado deround
se lanzan aint
. Esto es necesario porque sonfloat
sy la operación en ellos sin conversión resultaría en que la función devuelva afloat
.Finalmente, esa función es un poco más precisa que
que con una relación de 1:10 (aprox.) devuelve 1 milisegundo más que el resultado correcto. Esto se debe a la precisión limitada del tipo flotante (
microtime(true)
devuelve un flotante). De todos modos, si aún prefieres el más corto,round(microtime(true)*1000);
te sugiero que arrojesint
el resultado.Incluso si está fuera del alcance de la pregunta, vale la pena mencionar que si su plataforma admite enteros de 64 bits, también puede obtener la hora actual en microsegundos sin incurrir en un desbordamiento.
Si el hecho
2^63 - 1
(mayor entero con signo) dividido entre10^6 * 3600 * 24 * 365
(aproximadamente los microsegundos en un año) da292471
.Ese es el mismo valor que obtienes con
En otras palabras, un entero de 64 bits con signo tiene espacio para almacenar un intervalo de tiempo de más de 200,000 años medido en microsegundos.
Puede que tengas entonces
fuente
Como han dicho otros, puede usar
microtime()
para obtener una precisión de milisegundos en las marcas de tiempo.Según sus comentarios, parece quererlo como una marca de tiempo UNIX de alta precisión. Algo así como
DateTime.Now.Ticks
en el mundo .NET.Puede usar la siguiente función para hacerlo:
fuente
Usar
microtime(true)
en PHP 5, o la siguiente modificación en PHP 4:Una forma portátil de escribir ese código sería:
fuente
echo date('Y-m-d H:i:s.') . gettimeofday()['usec'];
salida:
2016-11-19 15:12:34.346351
fuente
$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']);
prueba esto:
fuente
Esto funciona incluso si está en PHP de 32 bits:
Tenga en cuenta que esto no le da enteros, sino cadenas. Sin embargo, esto funciona bien en muchos casos, por ejemplo, al crear URL para solicitudes REST.
Si necesita números enteros, PHP de 64 bits es obligatorio.
Luego puede reutilizar el código anterior y enviarlo a (int):
O puedes usar las buenas frases antiguas:
fuente
Espero que esto te ayude.
fuente
fuente
PHP 5.2.2 <
PHP 7.0.0 <7.1
fuente
Utilizar este:
Adiós
fuente