Guardando la marca de tiempo en la tabla mysql usando php

4 minutos de lectura

avatar de usuario
gautamlakum

Tengo un campo en una tabla MySQL que tiene un timestamp tipo de datos. Estoy guardando datos en esa tabla. Pero cuando paso la marca de tiempo (1299762201428) al registro, guarda automáticamente el valor 0000-00-00 00:00:00 en esa mesa.

¿Cómo puedo almacenar la marca de tiempo en una tabla MySQL?

Aquí está mi INSERT declaración:

INSERT INTO table_name (id,d_id,l_id,connection,s_time,upload_items_count,download_items_count,t_time,status)
VALUES (1,5,9,'2',1299762201428,5,10,20,'1'),
       (2,5,9,'2',1299762201428,5,10,20,'1')

  • qué marca de tiempo ¿estas hablando de? ¿Dónde lo obtuviste?

    – Tu sentido común

    12 de abril de 2011 a las 9:05


  • ¿Puedes pegar la estructura de tu tabla aquí?

    usuario319198

    12 de abril de 2011 a las 9:06

pasar así

date('Y-m-d H:i:s','1299762201428')

  • pero el valor que obtiene en db muestra que el tipo de columna es datetimesi desea cambiarlo a timestamp luego cambie el tipo de columna a varchar(15)

    – Jimmy

    12 de abril de 2011 a las 8:57

  • Luego póngalo en un campo INT. De todos modos, una marca de tiempo es solo una representación de una fecha, y viceversa. Puede convertir de la marca de tiempo a la fecha con la función que le dijo jimy, y al revés con strtotime. editar: por cierto, la marca de tiempo solo cubre un rango de todas las fechas posibles (1970-01-01 a xx-xx-2032, creo)

    – Carlos Campderrós

    12 de abril de 2011 a las 8:58


  • Entonces, ¿cuál es el uso del tipo de datos de marca de tiempo? El campo s_time tiene un tipo de datos de marca de tiempo. ¿No puedo guardar 1299762201428 en ese campo?

    – gautamlakum

    12 de abril de 2011 a las 9:00

  • @lakum4stackof: para el tipo de datos de marca de tiempo, consulte dev.mysql.com/doc/refman/5.0/en/timestamp.html para el detalle

    – Niño rodante

    12 de abril de 2011 a las 9:03


  • @ lakum4stackof: el uso de la marca de tiempo es que guarda la marca de tiempo, pero solo se muestra como una fecha. Internamente (como todos los tipos de datos) se almacena como un entero con signo. Si también desea formatear esa marca de tiempo como un número entero, le sugiero que use el campo INT entonces. El uso de la columna de marca de tiempo es la manipulación de la fecha (agregar intervalos y demás).

    – Michael JV

    12 de abril de 2011 a las 9:06

avatar de usuario
ricardo tuin

Hola, usa el FROM_UNIXTIME() función para esto.

Como esto:

INSERT INTO table_name
(id,d_id,l_id,connection,s_time,upload_items_count,download_items_count,t_time,status)
VALUES
(1,5,9,'2',FROM_UNIXTIME(1299762201428),5,10,20,'1'), 
(2,5,9,'2',FROM_UNIXTIME(1299762201428),5,10,20,'1')

  • ¿Por qué es esto mejor que date('Y-m-d H:i:s','1299762201428')?

    – Yuri

    16 de mayo de 2016 a las 7:27

  • Tipo de seguridad: FROM_UNIXTIME produce un tipo de fecha mysql nativo mientras que php date() devuelve una cadena.

    – Ricardo Tuín

    20 de mayo de 2016 a las 6:19


  • Es mejor porque el servidor web (PHP) y MySQL podrían estar en diferentes lugares. Entonces, date(‘Ymd H:i:s’,’1299762201428′) establecerá la zona horaria del servidor web. Con diferentes servidores web ubicados en diferentes zonas, tendrá datos inconsistentes. Alternativamente, en su código, debe forzar la zona horaria de la aplicación a la zona horaria de MySQL. date_timezone_set

    – Ostico

    4 mayo 2017 a las 19:34


avatar de usuario
Tushar Kumar Kundan

$created_date = date("Y-m-d H:i:s");
$sql = "INSERT INTO $tbl_name(created_date)VALUES('$created_date')";
$result = mysql_query($sql);

avatar de usuario
Tu sentido común

Algunas cosas para aclarar:

  • El tipo de campo de marca de tiempo de MySQL no almacena marcas de tiempo de Unix, sino un valor del tipo de fecha y hora.
  • La marca de tiempo de UNIX es un número de tipo int regular.
  • La marca de tiempo de la que está hablando no es una marca de tiempo normal de Unix sino una marca de tiempo con milisegundos.

por lo tanto la respuesta correcta seria

$timestamp = '1299762201428';
$date = date('Y-m-d H:i:s', substr($timestamp, 0, -3));

avatar de usuario
Masud Moshref

Puedes usar now() también en su consulta, es decir:

insert into table (time) values(now());

Utilizará la marca de tiempo actual.

avatar de usuario
niño rodante

Tipo de datos ‘bigint sin firmar‘ puede satisfacer este requisito.

Supongo que el campo en el que intenta guardar el valor es un campo de fecha y hora no lo es, pero lo mismo parece ser cierto para las marcas de tiempo. Si es así, mysql espera que el formato sea Año-mes-día Hora:minuto:segundo. Para guardar la marca de tiempo, deberá convertir el campo a numérico mediante una consulta como

alter table <table_name> change <field> <field> bigint unsigned

Si está usando la hora actual, puede usar now() o current_timestamp.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad