milisegundos fecha convertir php

php - convertir - obteniendo el formato de fecha mdY H: i: su desde milisegundos



php date milisegundos (13)

Estoy tratando de obtener una fecha formateada, incluidos los microsegundos de milisegundos.

El único problema es que sigo recibiendo 000000

date("m-d-Y H:i:s.u", $milliseconds/1000);

ex. 28/07/2013 11: 26: 14.000000


A partir de PHP 7.1 puedes simplemente hacer esto:

$date = new DateTime( "NOW" ); echo $date->format( "m-d-Y H:i:s.u" );

Se mostrará como:

04-11-2018 10:54:01.321688


Aquí hay otro método que encuentro un poco más elegante / simple:

echo date(''Y-m-d-H:i:s.'').preg_replace("/^.*/./i","", microtime(true));


Aquí hay un enfoque un poco más corto. En lugar de trabajar para crear una fecha / hora numérica de alta precisión, convierto el valor de microsegundos en una cadena, elimino el 0 y lo agrego al final de la cadena de fecha / hora. Puedo recortar fácilmente el número de decimales ajustando el parámetro de longitud de cadena; aquí utilizo 4 para obtener milisegundos, pero puede usar 7 para obtener microsegundos.

$t = explode(" ",microtime()); echo date("m-d-y H:i:s",$t[1]).substr((string)$t[0],1,4);

Para un valor de microtime () de 0.98236000 1407400573 , esto devuelve 08-07-14 01:08:13.982 .


Con PHP 7.0+ ahora aquí puedes hacer lo siguiente:

$dateString = substr($millseconds_go_here,0,10); $drawDate = new /DateTime(Date(''Y-m-d H:i'',$dateString)); $drawDate->setTimezone(new /DateTimeZone(''UTC''));

Esto hace lo siguiente en orden:

  1. Recorta los últimos 4 ceros de la cadena para que Date() pueda manejar la fecha.
  2. Utiliza la fecha para formatear los milisegundos en una cadena de fecha y hora que DateTime puede comprender.
  3. DateTime() puede permitirle modificar la zona horaria en la que se encuentra, pero asegúrese de que date_default_timezone_set("Timezone"); se establece antes de usar las funciones y clases de DateTime() .
  4. Es una buena práctica usar un constructor en sus clases para asegurarse de estar en la zona horaria correcta cuando se usan las clases o funciones de DateTime() .

Esto se basa en la respuesta de ArchCodeMonkey.

Pero simplemente simplificado, si solo quieres algo rápido que funcione.

function DateTime_us_utc(){ return DateTime::createFromFormat(''U.u'', number_format(microtime(true), 6, ''.'', '''')); } function DateTime_us(){ $now = DateTime_us_utc(); return $now->setTimeZone(new DateTimeZone(date_default_timezone_get())); }

Entonces para mi entonces

$now = DateTime_us(); $now->format("m-d-Y H:i:s.u");


La documentación dice lo siguiente:

Microsegundos (agregado en PHP 5.2.2). Tenga en cuenta que date () siempre generará 000000 ya que toma un parámetro entero, mientras que DateTime :: format () admite microsegundos.

Es decir, use DateTime en su lugar.


Mantenlo simple

echo date(''m-d-Y H:i:'').(date(''s'')+fmod(microtime(true), 1));


Puede hacer esto fácilmente con el formato de entrada Uu .

$now = DateTime::createFromFormat(''U.u'', microtime(true)); echo $now->format("m-d-Y H:i:s.u");

Esto produce el siguiente resultado:

04-13-2015 05:56:22.082300

Desde la página del manual de PHP para formatos de fecha:

  • U = Segundos desde la Época Unix
  • u = Microsegundos

http://php.net/manual/en/function.date.php

Gracias a giggsey por señalar un error en mi respuesta original, agregando number_format() a la línea debería arreglar el caso del segundo exacto. Lástima que ya no se siente tan elegante ...

$now = DateTime::createFromFormat(''U.u'', number_format(microtime(true), 6, ''.'', ''''));

http://php.net/manual/en/function.number-format.php

Una nota sobre las zonas horarias en respuesta a DaVe.

Normalmente, el método createFromFormat() usará la zona horaria local si no se especifica uno.

http://php.net/manual/en/datetime.createfromformat.php

Sin embargo, la técnica descrita aquí está inicializando el objeto DateTime usando microtime() que devuelve el número de segundos transcurridos desde la Época Unix (01 Ene 1970 00:00:00 GMT).

http://php.net/manual/en/function.microtime.php

Esto significa que el objeto DateTime se inicializa implícitamente a UTC, lo que está bien para las tareas internas del servidor que solo desean rastrear el tiempo transcurrido.

Si necesita mostrar la hora para un huso horario en particular, entonces necesita configurarlo en consecuencia. Sin embargo, esto debe hacerse como un paso separado después de la inicialización ( no utilizando el tercer parámetro de createFromFormat() ) debido a las razones discutidas anteriormente.

El método setTimeZone() se puede usar para cumplir este requisito.

http://php.net/manual/en/datetime.settimezone.php

Como ejemplo:

$now = DateTime::createFromFormat(''U.u'', number_format(microtime(true), 6, ''.'', '''')); echo $now->format("m-d-Y H:i:s.u") . ''<br>''; $local = $now->setTimeZone(new DateTimeZone(''Australia/Canberra'')); echo $local->format("m-d-Y H:i:s.u") . ''<br>'';

Produce el siguiente resultado:

10-29-2015 00:40:09.433818 10-29-2015 11:40:09.433818

Tenga en cuenta que si desea ingresar en mysql, el formato de tiempo debe ser:

format("Y-m-d H:i:s.u")


Si desea formatear una fecha como JavaScript (new Date()).toISOString() por alguna razón, así es como puede hacerlo en PHP:

$now = microtime(true); gmdate(''Y-m-d/TH:i:s'', $now).sprintf(''.%03dZ'',round(($now-floor($now))*1000));

Muestra de salida:

2016-04-27T18:25:56.696Z

Solo para demostrar que restando el número entero no reduce la precisión de la porción decimal:

>>> number_format(123.01234567890123456789,25) => "123.0123456789012408307826263" >>> number_format(123.01234567890123456789-123,25) => "0.0123456789012408307826263"

PHP redondeó los lugares decimales, pero los redondeó de la misma manera en ambos casos.


Soy uso

echo date("Y-m-d H:i:s.").gettimeofday()["usec"]; output: 2017-09-05 17:04:57.555036


si está utilizando Carbon, puede usar la especificación definida "RFC3339_EXTENDED". o personalizarlo.

Carbon::RFC3339_EXTENDED = ''Y-m-d/TH:i:s.vP'';


PHP.NET dice :

Microsegundos (agregado en PHP 5.2.2). Tenga en cuenta que date () siempre generará 000000 ya que toma un parámetro entero, mientras que DateTime :: format () admite microsegundos si DateTime se creó con microsegundos.

Entonces, use lo simple:

$micro_date = microtime(); $date_array = explode(" ",$micro_date); $date = date("Y-m-d H:i:s",$date_array[1]); echo "Date: $date:" . $date_array[0]."<br>";

Se recomienda y usa la clase dateTime() de la referencia:

$t = microtime(true); $micro = sprintf("%06d",($t - floor($t)) * 1000000); $d = new DateTime( date(''Y-m-d H:i:s.''.$micro, $t) ); print $d->format("Y-m-d H:i:s.u"); // note at point on "u"

Tenga en cuenta que es microsegundos (1 segundo = 1000000 μs).

Más muestra:

$ d2 = new DateTime ("2012-07-08 11: 14: 15.889342");

Referencia de dateTime() en php.net: http://php.net/manual/en/datetime.construct.php

Respondí la pregunta como corta y simplifiqué al autor. Consulte para obtener más información al autor: obtener el formato de fecha mdY H: i: su de milisegundos


// Procedural $fineStamp = date(''Y-m-d/TH:i:s'') . substr(microtime(), 1, 9); echo $fineStamp . PHP_EOL; // Object-oriented (if you must). Still relies on $fineStamp though :-/ $d = new DateTime($fineStamp); echo $d->format(''Y-m-d/TH:i:s.u'') . PHP_EOL;