2012-02-22 29 views
10

Tengo un problema ... Hay una tabla en mi base de datos MySQL que almacena las entradas de la lista de tareas dentro de un calendario de tipo JQuery.
Tuve que generar un calendar_id que generará un recordatorio una vez que haya creado la marca de tiempo (considerada como la hora en que hice clic en cualquiera de las cajas de fechas del calendario, para introducir algunas tareas pendientes; en pocas palabras: fecha de creación).Fecha y hora en el número entero

Esta aplicación de actividades de lista de tareas es una aplicación externa en la que he estado trabajando para integrarla con mi propio sistema de gestión. Me di cuenta de que la columna de marca de tiempo está en formato int(11), por lo que cualquier marca de tiempo introducida se convertirá en número entero.

Por ejemplo, echar un vistazo a esto:

2012-02-22 15:31:24 

convertido a

1329899400 

¿Cómo podemos convertir la fecha y hora de este formato? No es en segundos cuando lo intenté:

intval(floor($datetime/86400)); 

¿Algún ayuda?

+0

No creo que DateTime no pueda ser representado por un Entero. DateTime es el número de segundos desde (dependiendo de varios favtors) desde una fecha específica en 1970. Vas a tener que averiguar qué representa el valor, ya que realmente no parece, como realmente sabes. –

+0

Sí, estoy averiguando qué representa el valor porque la secuencia de números es 'extraña' para cualquier marca de tiempo insertada ... Al menos para mí, esta es la primera vez que experimento esto porque todavía estoy aprendiendo PHP/MySQL:) – foxns7

+0

@Selang: el número es un [timestamp UNIX] (http://en.wikipedia.org/wiki/Unix_timestamp). Son ampliamente utilizados (obviamente, especialmente en sistemas UNIX). – Chris

Respuesta

14

FROM UNIXTIME puede dar formato a las marcas de tiempo UNIX en los campos de fecha y hora:

SELECT FROM_UNIXTIME(time) 
FROM ... 

La función inversa sería UNIX_TIMESTAMP.


Alternativamente, puede hacerlo en PHP, si está disponible:
Para almacenar una fecha en el formato de base de datos de esta manera:

$datetimeStr = '2012-02-22 15:31:24'; 
$datetime = strtotime($datetimeStr); 

para recuperarlo de la BD y darle formato a la formato original, el uso de algo como esto:

$dateTimeFromDB = '1329921084'; 
$datetimeStr = date('Y-m-d H:i:s', $dateTimeFromDB); 
+0

Caray, soy totalmente un tonto por no aprender esta función de Unixtime ... gracias por responder – foxns7

+0

¡Funcionó! Gracias ... – foxns7

+1

¿Qué pasa con las fechas menores que 01.01.1970? –

6

Aquí hay una buena función de MySQL UNIX_TIMESTAMP() para usted

+0

Es "INSERT INTO db.table (' timestamp') VALUES (UNIX_TIMESTAMP ($ datetime)) "; el comando correcto en mi caso? – foxns7

+0

Si su '$ datetime' está en formato' YYYY-MM-DD HH: MM: SS' (tenga en cuenta que puede usar separadores diferentes en lugar de '-' y': ', entonces sí. Alternativamente, dado que usa PHP , puedes usar su función 'strtotime()'. – Mchl

+0

Olvidé decirte, realicé $ datetime = strtotime ($ datetime); pero los valores en la base de datos solo leerán 2012, que es la parte 'Año'. ¿Cómo sucedió eso? – foxns7