2010-09-03 40 views

Respuesta

2

Desde la marca de tiempo no es una marca de tiempo Unix, usted tiene que utilizar substr()

$timestamp = "20100902040003"; 

$year = substr($timestamp, 0, 3); 
$month = substr($timestamp, 4, 5); 
$day = substr($timestamp, 6, 7); 
$hour = substr($timestamp, 8, 9); 
$minute = substr($timestamp, 10, 11); 
$second = substr($timestamp, 12, 13); 

Entonces usted arregla que el uso de sprintf()

$formatted_timestamp = sprintf('%s-%s-%s %s:%s:%s', $year, $month, $day, $hour, $minute, $second); 
+0

gracias. ¿Pondré esta función en mi declaración de foreach cuando creo dinámicamente la fila? Gracias. – cjd143SD

+0

He arreglado el formato ya que G imprimirá la hora sin el cero inicial, en su lugar debe usar H. Puede poner la función cuando crea la matriz, o cuando la imprime, ambas funcionan. – leonardys

10
$timestamp = "20100902040003"; 
echo date('Y-m-d H:i:s', strtotime($timestamp)); // output: 2010-09-02 04:00:03 
+0

@downvoter: está dando resultado como se menciona en la pregunta. ¿Lo explicarás en detalle? – NAVEED

+0

Cambié mi -1 a +1 ya que leí mal. Me perdí la llamada 'strtotime()'. – BoltClock

+0

@codaaddict porque la función 'strtotime' lo convierte en una marca de tiempo – Mischa

2

Si está seguro de que todos los registros en su archivo de entrada tiene el formato YYYYMMDDHHmmss, puede intentar dividir la cadena usted mismo y luego usar date() en conjunto con mktime() para generar un formato de fecha significativo.

+0

gracias. sí, todos los registros tienen exactamente el mismo formato. ¿Puedes mostrarme un ejemplo? – cjd143SD

+1

strtotime() entiende las marcas de tiempo ISO 8601 como "20100902040003" – nohat

+0

Creo que la solución de nohat es mejor ya que omite por completo las funciones 'date' y' mktime'. – BoltClock

2

Dado que sus datos ya están en el formato correcto, solo necesita algunos signos de puntuación, por lo que puede usar una expresión regular, en lugar de las funciones de análisis de fecha y formato de fecha.

$timestamp = "20100902040003"; 
preg_replace('/(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/', 
      '\1-\2-\3 \4:\5:\6', $timestamp) 

rendimientos:

2010-09-02 04:00:03 
Cuestiones relacionadas