58 votos

PHP mysql insertar formato de fecha

Im usando jQuery datepicker el formato de la datepicker es esto08/25/2012

tengo errores al insertarlo a mi base de datos introduzca sólo 0000-00-00 00 00 00

mi código es

<?php
$id = $_POST['id'];
$name = $_POST['name'];
$date = $_POST['date'];
$sql = mysql_query( "INSERT INTO user_date VALUE( '', '$name', '$date')" ) or die ( mysql_error() );
echo 'insert successful';
?>

IM seguro mi inserción es correcta...

176voto

eggyal Puntos 60363

Como se indicó en la Fecha y Hora Literales:

MySQL reconoce DATE valores en los siguientes formatos:

  • Como una cadena en 'YYYY-MM-DD' o 'YY-MM-DD' formato. Un "relajado" sintaxis es permitido: Cualquier signo de puntuación puede ser usado como delimitador entre las partes de la fecha. Por ejemplo, '2012-12-31', '2012/12/31', '2012^12^31'y '2012@12@31' son equivalentes.

  • Como una cadena sin delimitadores en 'YYYYMMDD' o 'YYMMDD' formato, siempre que la cadena tenga sentido como fecha. Por ejemplo, '20070523' y '070523' son interpretados como '2007-05-23', pero '071332' es ilegal (tiene sentido, mes y día) y se convierte en '0000-00-00'.

  • Como un número en YYYYMMDD o YYMMDD formato, siempre que el número tenga sentido como fecha. Por ejemplo, 19830905 y 830905 son interpretados como '1983-09-05'.

Por lo tanto, la cadena '08/25/2012' no es válido MySQL literal de fecha. Usted tiene cuatro opciones (en algunas vagas orden de preferencia, sin más información de los requisitos):

  1. Configurar el selector de fecha para proporcionar fechas en un formato compatible con el uso de su dateFormat opción de:

    $( ".selector" ).datepicker({ dateFormat: "yyyy-mm-dd" });
    
  2. El uso de MySQL STR_TO_DATE() función para convertir la cadena:

    INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
    
  3. Convertir la cadena de caracteres recibida de jQuery en PHP de la marca de tiempo—por ejemplo, el uso de strtotime():

    $timestamp = strtotime($_POST['_date']);
    

    y luego:

    • formato de la marca de tiempo en el uso de date():

      $date = date('Y-m-d', $timestamp);
      
    • pasar la marca de tiempo directamente a MySQL usando FROM_UNIXTIME():

      INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
      
  4. Manipular manualmente la cadena en un válido literal:

    $parts = explode('/', $_POST['date']);
    $date  = "$parts[2]-$parts[0]-$parts[1]";
    

Advertencia

  1. Su código es vulnerable a inyección SQL. Usted realmente debe ser el uso de declaraciones preparadas, en el que se pasa las variables como parámetros que no se evalúa para SQL. Si usted no sabe de qué estoy hablando, o cómo solucionarlo, leer la historia de Bobby Tablas.

  2. También, como se indicó en la introducción al manual de PHP capítulo en la mysql_* funciones:

    Esta extensión es obsoleta a partir de PHP 5.5.0, y no se recomienda para escribir nuevo código, ya que será eliminado en el futuro. En su lugar, el mysqli o PDO_MySQL extensión debe ser utilizado. Véase también la API de MySQL Introducción para obtener más ayuda, mientras que la elección de una API de MySQL.

  3. Usted parece ser el uso de un DATETIME o TIMESTAMP columna para la celebración de un valor de fecha; recomiendo considerar el uso de MySQL DATE tipo de cambio. Como se explica en La DATE, DATETIMEy TIMESTAMP Tipos de:

    El DATE tipo se utiliza para los valores con una parte de la fecha, pero no hay tiempo parcial. MySQL recupera y muestra los valores de FECHA en 'YYYY-MM-DD' formato. El rango es '1000-01-01' a '9999-12-31'.

    El DATETIME se utiliza el tipo de valores que contienen ambas partes de fecha y hora. MySQL recupera y muestra DATETIME valores en 'YYYY-MM-DD HH:MM:SS' formato. El rango es '1000-01-01 00:00:00' a '9999-12-31 23:59:59'.

    El TIMESTAMP tipo de datos se utiliza para los valores que contienen ambas partes de fecha y hora. TIMESTAMP tiene un rango de '1970-01-01 00:00:01' UTC '2038-01-19 03:14:07' UTC.

10voto

Mihai Iorga Puntos 23686

Considere la creación de una marca de hora desde fecha witk mktime()

por ejemplo:

$date = explode('/', $_POST['date']);
$time = mktime(0,0,0,$date[0],$date[1],$date[2]);
$mysqldate = date( 'Y-m-d H:i:s', $time );

1voto

Ilia Rostovtsev Puntos 3395

Usted debe asegurarse de que el formato de la fecha es AAAA-MM-DD en el jQuery de salida. Puedo ver jQuery devuelve MM-DD-AAAA, que no es el válido MySQL formato de fecha y esta es la razón por la que se devuelve un error.

Para convertir a la derecha uno que usted podría hacer esto:

$dateFormated = split('/', $date);
$date = $dateFormated[2].'-'.$dateFormated[0].'-'.$dateFormated[1];

Entonces usted va a conseguir el formato de fecha que será válido MySQL formato, que es AAAA-MM-DD, es decir, 2012-08-25

También recomiendo el uso de mysql_real_escape_string como insertar datos en la base de datos para evitar inyecciones SQL como una solución rápida o mejor uso de PDO o MySQLi.

Su consulta insert usando mysql_real_escape_string más bien debería tener este aspecto:

$sql = mysql_query( "INSERT INTO user_date VALUE( '', '" .mysql_real_escape_string($name). "', '" .mysql_real_escape_string($date). "'" ) or die ( mysql_error() );

-2voto

Pruebe algo como esto...

echo "The time is " . date("2:50:20");
$d=strtotime("3.00pm july 28 2014");
echo "Created date is " . date("d-m-y h:i:sa",$d);

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X