2010-02-20 15 views
19

Tengo una base de datos mySQL con un campo de marca de tiempo. Por el momento solo tiene una entrada mientras estoy de pruebas, esFormateo de una marca de tiempo SQL con PHP

2010-02-20 13:14:09 

estoy tirando de la base de datos y el uso de

echo date("m-d-Y",$r['newsDate']) 

Mi resultado final se muestra como

12-31-69 

Cualquiera ¿saber porque?

Edit: editedit: sin tener en cuenta que editan ... el complemento FTP para el bloc de notas ++ ha agotado el tiempo y lamentablemente no muestra un error cuando no se puede sincronizar.

+0

Ah ... no me di cuenta de que mySQL tenía un código de tiempo UNIX ... eso tiene sentido, entonces. –

+0

Si '$ r ['timestamp']' está vacío, obtendrá el tiempo que utilice el sistema como punto de partida para el tiempo de época. (Que generalmente es 01-01-70 o 12-31-69) – leepowers

Respuesta

45

La función date espera un UNIX timestamp como su segundo parámetro - lo que significa que tiene que convertir la fecha que se obtiene de la base de datos para una marca de tiempo UNIX, lo cual puede hacerse usando strtotime:

$db = '2010-02-20 13:14:09'; 
$timestamp = strtotime($db); 
echo date("m-d-Y", $timestamp); 

Y usted obtendrá:

02-20-2010 


Usted estaba pasando la cadena '2010-02-20 13:14:09' a la función date; esa cadena no es una marca de tiempo de UNIX válida.

'12-31-69 'es probablemente 1970-01-01, en su localidad; y 1970-01-01 es la Época - la fecha que corresponde al 0 UNIX Timestamp.

+0

No estoy seguro de por qué esto fue votado, es correcto. Puede usar la función stpotime php o el método UNIX_TIMESTAMP SQL según lo sugerido por Urda – Simon

+0

@Simon: me pregunto, también, en realidad ;; Supuse que no respondí la pregunta correctamente y me preguntaba cuál era la "forma correcta de entenderlo" ^^ ;; Gracias por su nota :-) –

+0

¿Qué pasa si también quiero mostrar la hora? –

0

EDIT: Después de comprobar, parece que MySQL devuelve un timestamp como una cadena de PHP, por lo que esta respuesta era falso :)

De todos modos, la razón se obtiene una fecha en 1969 es probable que se va a convertir un tiempo cero de Unix desde UTC hasta localtime. El tiempo de Unix es el número de segundos desde 1970. Entonces, un valor de 0 significa 1970. Usted probablemente vive en una zona horaria con un desplazamiento negativo, como GMT-6, que termina siendo 31-12-69.

4

Para empezar, la función php date() espera segundos como la segunda variable. Entonces eso explica por qué su fecha se muestra mal. Compruebe esto source en ese tema.

Que luego nos proporciona la respuesta al problema, para obtener PHP para dar formato a la fecha a partir de una marca de tiempo de SQL correctamente, simplemente cambiamos la consulta un poco ...

SELECT author, `when` 

cambiarlo a ...

SELECT author, UNIX_TIMESTAMP(`when`) 

continuación, utilizar la función de fecha de PHP, con la variable que almacena el resultado de esa consulta SQL anterior.

1

Se podía utilizar la función de MySQL date_format() lugar:

SELECT date_format(timestampfield, '%m-%d-%Y') FROM table etc.... 

Esto le ahorrará tener que ida y vuelta a su marca de tiempo en tiempo Unix y luego vuelta a una cadena fecha normal en PHP. Una llamada de formato de fecha y hora en lugar de dos.

0

bien, yo estaba luchando con esto durante una semana (más tiempo, pero me tomó un descanso de ella).

Tengo dos campos específicos en las tablas

 
creationDate > timestamp > current_timestamp 
editDate > timestamp > current_timestamp 

que se retiraba o bien dec 31 de 1969, o simplemente nada ... molesto ... muy molesto

en la consulta mysql lo hice:

  unix_timestamp(creationDate) AS creationDate 
      unix_timestamp(editDate) AS editDate 

convertido en php que hice:

$timestamp = $result_ar['creationDate']; 
    $creationDate = date("Y-M-d (g:i:s a)", $timestamp) 
      echo($creationDate); 

    $editstamp = $result_ar['editDate']; 
    $editDate = date("Y-M-d (g:i:s a)", $editstamp) 
      echo($editDate); 

esta resuelto mi problema para mí regresar

  2010-Jun-28 (5:33:39 pm) 
      2010-Jun-28 (12:09:46 pm) 

respectivamente.

espero que esto ayude a alguien por ..

1

Creo que esto será útil para Newble:

ejemplo la resta básica de 1 hora desde la fecha del formato de MySQL:

$to='2013-25-10 22:56:00'; //curr time 
$timestamp = strtotime($to); //convert to Unix timestamp 
$timestamp = $timestamp-3600; //subtract 1 hour (3600 this is 1 hour in seconds) 
echo date("Y-m-d H:i:s",$timestamp); //show new date 
Cuestiones relacionadas