obtener formato fecha español actual php time milliseconds

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



php microtime (11)

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


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

De tus comentarios, parece que lo quieres como una marca de tiempo UNIX de alta precisión. Algo así como DateTime.Now.Ticks en el mundo .NET.

Puedes usar 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); }


Esto funciona incluso si estás en PHP de 32 bits:

list($msec, $sec) = explode('' '', microtime()); $time_milli = $sec.substr($msec, 2, 3); // ''1491536422147'' $time_micro = $sec.substr($msec, 2, 6); // ''1491536422147300''

Tenga en cuenta que esto no le da números enteros, sino cadenas. Sin embargo, esto funciona bien en muchos casos, por ejemplo, al crear direcciones URL para solicitudes REST.


Si necesita enteros, PHP de 64 bits es obligatorio.

Luego puede reutilizar el código anterior y convertir a (int):

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

O puedes usar las buenas frases de uno solo:

$time_milli = (int) round(microtime(true) * 1000); // 1491536422147 $time_micro = (int) round(microtime(true) * 1000000); // 1491536422147300


La respuesta corta es:

$milliseconds = round(microtime(true) * 1000);


Use microtime(true) en PHP 5, o la siguiente modificación en PHP 4:

array_sum(explode('' '', microtime()));

Una forma portátil de escribir ese código sería:

function getMicrotime() { if (version_compare(PHP_VERSION, ''5.0.0'', ''<'')) { return array_sum(explode('' '', microtime())); } return microtime(true); }


Utilizar esta:

function get_millis(){ list($usec, $sec) = explode('' '', microtime()); return (int) ((int) $sec * 1000 + ((float) $usec * 1000)); }

Adiós


prueba esto:

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"); }


Utilice 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 en true para 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 utiliza microtime(true) .

También hay gettimeofday() que devuelve la parte de microsegundos como un entero.

var_dump(gettimeofday()); /* array(4) { ["sec"]=> int(1283846202) ["usec"]=> int(891199) ["minuteswest"]=> int(-60) ["dsttime"]=> int(1) } */


echo date(''Ymd H:i:s.'') . gettimeofday()[''usec''];

salida:

2016-11-19 15:12:34.346351


Respuesta corta:

Sólo plataformas de 64 bits!

function milliseconds() { $mt = explode('' '', microtime()); return ((int)$mt[1]) * 1000 + ((int)round($mt[0] * 1000)); }

Respuesta larga:

Si desea una función equilibrada de time() en milisegundos, primero debe considerar que como time() devuelve el número de segundos transcurridos desde el "tiempo de época" (01/01/1970), el número de milisegundos desde la "época tiempo "es un número grande y no encaja en un entero de 32 bits.

El tamaño de un entero en PHP puede ser de 32 o 64 bits dependiendo de la plataforma.

De http://php.net/manual/en/language.types.integer.php

El tamaño de un entero depende de la plataforma, aunque un valor máximo de aproximadamente dos mil millones es el valor habitual (es decir, 32 bits con signo). Las plataformas de 64 bits generalmente tienen un valor máximo de aproximadamente 9E18, excepto para Windows, que siempre es de 32 bits. PHP no soporta enteros sin signo. El tamaño entero se puede determinar utilizando la constante PHP_INT_SIZE, y el valor máximo utilizando la constante PHP_INT_MAX desde PHP 4.4.0 y PHP 5.0.5.

Si tiene enteros de 64 bits, puede utilizar la siguiente función:

function milliseconds() { $mt = explode('' '', microtime()); return ((int)$mt[1]) * 1000 + ((int)round($mt[0] * 1000)); }

microtime() devuelve el número de segundos desde el "tiempo de época" con una precisión de hasta microsegundos con dos números separados por espacio, como ...

0.90441300 1409263371

El segundo número es el segundo (entero) precedido por la parte decimal.

La función milliseconds toma la parte entera multiplicada por 1000

1409263371000

y agrega la parte decimal multiplicada por 1000 y redondeada a 0 decimales

1409263371904

Tenga en cuenta que tanto $mt[1] como el resultado de la round se convierten en int . Esto es necesario porque son float y la operación en ellos sin lanzarlos daría lugar a que la función devuelva un float .

Finalmente, esa función es ligeramente más precisa que

round(microtime(true)*1000);

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 float ( microtime(true) devuelve un float). De todos modos, si aún prefiere la round(microtime(true)*1000); más corta round(microtime(true)*1000); Yo sugeriría que se lance a int 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 desbordamiento.

Si el hecho 2^63 (aprox. El mayor entero con signo) dividido por 10^6 * 3600 * 24 * 365 (aprox. Los microsegundos en un año) da aprox. 292471 .

Ese es el mismo valor devuelto por echo PHP_INT_MAX / (1000000*3600*24*365);

En otras palabras, un entero con signo tiene espacio para almacenar un intervalo de tiempo de más de 200000 años medidos en microsegundos.

Puede tener entonces

function microseconds() { $mt = explode('' '', microtime()); return ((int)$mt[1]) * 1000000 + ((int)round($mt[0] * 1000000)); }


$the_date_time = new DateTime($date_string); $the_date_time_in_ms = ($the_date_time->format(''U'') * 1000) + ($the_date_time->format(''u'') / 1000);


$timeparts = explode(" ",microtime()); $currenttime = bcadd(($timeparts[0]*1000),bcmul($timeparts[1],1000)); echo $currenttime;

NOTA: PHP5 es necesario para esta función debido a las mejoras con microtime () y también se requiere el módulo bc math (ya que estamos tratando con números grandes, puede verificar si tiene el módulo en phpinfo).

Espero que esto te ayude.