¿Cómo guardar enteros en la columna de marca de tiempo de MySQL en WordPress?

2 minutos de lectura

Creé una tabla para mi base de datos de wordpress dentro de mi complemento con:

global $wpdb;
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
global $charset_collate;
$table_name = $wpdb->prefix .'tablename';
$sql="CREATE TABLE ".$table_name." (
   ...
   date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
   ...
) $charset_collate;
";
dbDelta($sql);

Eso funciona bien. Pero cuando trato de guardar valores enteros que representan la fecha, guarda “0000-00-00 00:00:00”, excepto en un caso, guarda la fecha correcta: “2014-01-11 01:59:00”. Pero todos los valores enteros son fechas de marca de tiempo válidas (int(1401110159), int(1400525576), int(1400510041), …). Aquí está el código que estoy tratando de insertar mis filas:

$wpdb->$table_name=$table_name;
$wpdb->insert($table_name, array(
   ...
   "date" => $my_date_integer_variable,
   ...
));

¿Alguien sabe qué está causando el error?

  • Debe convertir las fechas de entrada a Y-m:d H:i:s formatear usando strtodate() o Datetime objeto en PHP

    – Abhik Chakraborty

    24 de octubre de 2014 a las 14:28


  • Hola, ya es un entero. Pero supongo que wordpress lo convierte en una cadena o algo así. Pero un valor se guarda como la fecha correcta. No tiene sentido para mí. Realmente confuso 😀

    – usuario2718671

    24/10/2014 a las 14:33

  • A timestamp la columna guarda el valor como entero internamentepero muestra te lo devuelvo como Y-m-d H:i:s. Esa columna es útil porque siempre es UTC, lo que facilita compensarla con la información de la zona horaria. Cuando se inserta en un timestamp columna, quiere un valor formateado de la misma manera que lo muestra, lo que significa Y-m-d H:i:s. Como han señalado los otros chicos, lo haces formateando la fecha correctamente. Si desea insertar la hora actual en un timestamppuede emitir INSERT INTO your_ts_table SET ts_column = NOW(); (la última es una función de MySQL).

    – NB

    24/10/2014 a las 14:50

MySQL espera que las marcas de tiempo estén en Y-m-d H:i:s formato cuando haces el formato de inserción no entero. es decir. 2014-10-24 23:23:34

Puede hacer la conversión de int a formato de fecha y hora con:

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

En tu caso:

$wpdb->insert($table_name, array(
   ...
   "date" => date('Y-m-d H:i:s', $my_date_integer_variable)
   ...
));

  • ¡Trabajado como un encanto! ¡Muchos gracias! 🙂

    – usuario2718671

    28 de octubre de 2014 a las 8:33

¿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