Cómo: Insertar Registro con Fecha usando wpdb
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.

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.

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.

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.

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

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.
