2012-02-11 27 views
5

tengo 13 número de dígitos y quiero crear fecha y hora con incluir milisecondCrear 3 milisegundos dígitos con php

Ejemplo de código es así que este es mi script php

$mil = 1328910295939; 
$seconds = $mil/1000; 
$showdate = date('Y:m:d H:i:s', $seconds) ; 

echo "$showdate"; 

el resultado es como esto 2012: 02: 10 15: 44: 55.xxx ===> xxx son milisegundos de 3 dígitos que quiero mostrar.

y cómo incluir con 3 dígitos después de milisecond H: i: s

favor me ayude .....

Respuesta

6

¿Qué tal algo así?

$mil = 1328910295939; 

function toTimestamp($milliseconds) 
{ 
    $seconds = $milliseconds/1000; 
    $remainder = round($seconds - ($seconds >> 0), 3) * 1000; 

    return date('Y:m:d H:i:s.', $seconds).$remainder; 
} 

echo toTimestamp($mil); 

Tadaa!

Debe ser bastante rápido también.

Además, esta es la salida: 2012:02:10 15:44:55.939 - por qué no está utilizando - para delimitar la parte de la fecha que me gana.

+0

Gracias amigo ..... buen trabajo. Eres el mejor, porque iam buscar una semana en internet no tiene solución. – Smith

+0

Hola Westie todavía tenía problemas, el HORARIO era 2 horas más rápido ... ejemplo 22: 07: 45.434 HORAS debería ser 20. – Smith

+0

Ese es un problema con su servidor: deberá configurar la zona horaria. – Westie

5

Sólo recorte los dos últimos caracteres:

substr(date('Y-m-d H:i:s.u',1328910295939), 0, -2) 
+0

En mi sistema, esto dé como resultado "12/10/2025 22: 17: 55.0000" (PHP 5.3.6 en Ubuntu) – iblue

+0

todavía no funciona ... por favor ayúdenme a congelar con esto. – Smith

+0

este es mi script php $ mil = 1328910295939; $ seconds = $ mil/1000; $ showdate = date ('A: m: d H: i: s', $ segundos); echo "$ showdate"; el resultado es como este 2012: 02: 10 15:44:55 y cómo incluir con 3 dígitos después de milisecond H: i: s – Smith

4

aquí está una función que lo hará por usted con precisión (redondeando, sin cortar):

function getTimestamp() 
{ 
     $microtime = floatval(substr((string)microtime(), 1, 8)); 
     $rounded = round($microtime, 3); 
     return date("Y-m-d H:i:s") . substr((string)$rounded, 1, strlen($rounded)); 
} 

Explicación nación:

microtime() devuelve 2 números como 1 cadena, delimitada por un espacio. el segundo número es la cantidad de segundos desde la época de Unix, y el primer número es la cantidad de microsegundos desde el segundo número. Básicamente, el primer número es la cantidad de microsegundos expresados ​​en un formato de precisión de 8 (0.00000000) y los finales 0s nunca se cortan.

Redondeamos esto a una precisión de 3 (0.00), cortamos el 0 inicial y lo agregamos a la marca de tiempo real.

Por alguna razón, el documento php para usted, microsegundos, no parece ser compatible. Recibo 0.000 cada vez que uso ese método. Así que recurrí a microtime() como solución de respaldo.

+0

Ejemplo de código es así este es mi script php $ mil = 1328910295939; $ seconds = $ mil/1000; $ showdate = date ('A: m: d H: i: s', $ segundos); echo "$ showdate"; el resultado es como este 2012: 02: 10 15: 44: 55.xxx ===> xxx es de 3 dígitos milisegundos que quiero mostrar. – Smith

+1

El formato 'u' es compatible con fechas que contienen microsegundos (por ejemplo, instancias' DateTime'). La función 'date()' solo funciona con marcas de tiempo enteras, por lo que no sabe acerca de segundos fraccionarios. – salathe

1
$t = 1328910295939; 
echo date('Y-m-d H:i:s.', substr($t, 0, -3)) . substr($t, -3); 

Salida: 2012-02-10 16:44:55.939 (que depende de la zona horaria)

0

Debido a que estas respuestas eran todos muy divertido en su complejidad, aquí está otro respuesta para el futuro la posteridad que utiliza código original del autor de la pregunta y doesn' t tratar los números como cadenas.

$mil = 1328910295939; 
$seconds = floor($mil/1000); 
$fraction = $mil % 1000; 
$showdate = date('Y:m:d H:i:s',$seconds) . ".$fraction"; 

echo "$mil<br> 
$seconds<br> 
$fraction<br> 
$showdate"; 

Salidas lo siguiente en un servidor configurado con la zona horaria EST:

1328910295939 
1328910295 
939 
2012:02:10 16:44:55.939 
Cuestiones relacionadas