Cómo: Insertar Registro con Fecha usando wpdb

24 abr 2013, 23:07:01
Vistas: 20K
Votos: 2

Estoy escribiendo un plugin donde necesito precargar algunos datos en las tablas personalizadas que creo durante la Activación. Mis inserciones han funcionado bien hasta ahora, hasta que intento insertar un registro con un tipo de dato DATE. ¿Alguien puede decirme qué tengo mal aquí?

Definición de la Tabla de Base de Datos:

$sql =  "CREATE TABLE IF NOT EXISTS " . $wpdb->prefix.SSM_ACADEMIC_YEAR_TABLE. " (
                  id mediumint(12) NOT NULL AUTO_INCREMENT,
                  academicyear VARCHAR(200) NOT NULL,
                  begin_date date NOT NULL,
                  end_date date NOT NULL,
                  created_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                PRIMARY KEY (id));";

    $wpdb->query($sql);

Inserción en la Base de Datos:

$current_year = array(
            'academicyear' => '2012 - 2013',
            'begin_date'   => date('Y-m-d', '2012-08-14'),
            'end-date'     => date('Y-m-d', '2013-05-31')
        );

        $wpdb->insert($wpdb->prefix.SSM_ACADEMIC_YEAR_TABLE, $current_year);

He intentado muchos métodos diferentes como simplemente usar => '2012-08-14' pero tampoco funciona. Estoy seguro de que hay alguna sintaxis que me falta o tengo mal.

0
Todas las respuestas a la pregunta 3
0

Puedes simplemente utilizar la función current_time. Por ejemplo:

<?php $time = current_time( 'mysql' ); ?>

La función devolverá la cadena de fecha y hora que MySQL requiere.

Puedes encontrar más detalles aquí. Y si estás interesado en los "problemas de programación con zonas horarias", te gustará leer este artículo Gestionando horas y fechas en WordPress.

20 dic 2016 05:14:57
4

date no acepta una cadena legible por humanos. Requiere un timestamp de Unix. Necesitas convertir esa fecha humana a un timestamp usando strtotime.

'begin_date'   => date('Y-m-d', strtotime('2012-08-14')),

Por supuesto, realmente no hay necesidad de convertir una fecha en formato AÑO-MES-DÍA a un timestamp solo para volver a convertirla al mismo formato AÑO-MES-DÍA.

24 abr 2013 23:27:16
Comentarios

Hay un error tipográfico en tu código. Creaste end_date pero estás insertando datos en end-date. Lo marco para cerrarlo como 'demasiado localizado' pero podrías simplemente eliminarlo.

s_ha_dum s_ha_dum
24 abr 2013 23:51:10

¡Dios mío! ¡Muchas gracias! Eso era y sí, lo eliminaré.

clockwiseq clockwiseq
24 abr 2013 23:53:43

aparentemente no tengo suficiente credibilidad para eliminarlo, así que puedes cerrarlo.

clockwiseq clockwiseq
25 abr 2013 00:00:04

para otros que estén mirando esto, no es necesario hacer strtotime de 2012-08-14 y luego generar lo mismo otra vez con date - simplemente 'begin_date' => '2012-08-14' está bien

Alex K Alex K
7 jul 2016 19:21:07
0

La respuesta aceptada no es correcta. Puedes pasar formatos de fecha en cadena a la base de datos, siempre y cuando estén formateados de una manera que la base de datos entienda (por ejemplo, 2022-01-15T20:34:34 o 2022-01-15 20:34:34). Puedes encontrar las especificaciones de MariaDB aquí, estoy bastante seguro de que son las mismas que para MySQL.

16 ene 2022 21:49:13