PHP формат даты mysql

Я использую jQuery datepicker, формат datepicker – это 08/25/2012

У меня есть ошибки при вставке в мою базу данных, он вставляет только 0000-00-00 00 00 00

мои коды

 <?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'; ?> 

Я уверен, что моя вставка правильная ….

Как указано в литературе даты и времени :

MySQL распознает значения DATE в этих форматах:

  • Как строка в 'YYYY-MM-DD' или 'YY-MM-DD' . Разрешен «расслабленный» синтаксис: любой символ пунктуации может использоваться как разделитель между частями даты. Например, '2012-12-31' , '2012/12/31' , '2012^12^31' и '2012@12@31' эквивалентны.

  • В качестве строки без разделителей в формате 'YYYYMMDD' или 'YYMMDD' при условии, что строка имеет смысл в качестве даты. Например, '20070523' и '070523' интерпретируются как '2007-05-23' , но '071332' является незаконным (он имеет бессмысленные месячные и дневные части) и становится '0000-00-00' .

  • Как число в формате YYYYMMDD или YYMMDD , при условии, что число имеет смысл в качестве даты. Например, 19830905 и 830905 интерпретируются как '1983-09-05' .

Поэтому строка '08/25/2012' не является допустимым литералом даты в MySQL. У вас есть четыре варианта (в каком-то неопределенном порядке предпочтения, без дополнительной информации о ваших требованиях):

  1. Настройте Datepicker для предоставления дат в поддерживаемом формате с использованием altField вместе со своей опцией altFormat :

     <input type="hidden" id="actualDate" name="actualDate"/> 
     $( "selector" ).datepicker({ altField : "#actualDate" altFormat: "yyyy-mm-dd" }); 

    Или, если вы счастливы, что пользователи видят дату в YYYY-MM-DD , просто установите вместо dateFormat параметр dateFormat :

     $( "selector" ).datepicker({ dateFormat: "yyyy-mm-dd" }); 
  2. Используйте STR_TO_DATE() MySQL для преобразования строки:

     INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y')) 
  3. Преобразуйте строку, полученную из jQuery, в то, что PHP понимает как дату, например объект DateTime :

     $dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']); 

    а затем либо:

    • получить подходящую форматированную строку:

       $date = $dt->format('Ym-d'); 
    • получить временную метку UNIX:

       $timestamp = $dt->getTimestamp(); 

      который затем передается непосредственно функции MySQL FROM_UNIXTIME() :

       INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp)) 
  4. Вручную манипулируйте строкой в ​​действительный литерал:

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

Предупреждение

  1. Ваш код уязвим для SQL-инъекции. Вы действительно должны использовать подготовленные инструкции , в которые вы передаете свои переменные в качестве параметров, которые не оцениваются для SQL. Если вы не знаете, о чем я говорю, или как это исправить, прочитайте историю Бобби Таблса .

  2. Кроме того, как указано во введении к главе руководства PHP о mysql_* :

    Это расширение устарело с PHP 5.5.0 и не рекомендуется для написания нового кода, поскольку оно будет удалено в будущем. Вместо этого следует использовать расширение mysqli или PDO_MySQL . См. Также Обзор API MySQL для получения дополнительной информации при выборе API MySQL.

  3. Кажется, что вы используете столбец DATETIME или TIMESTAMP для хранения значения даты; Я рекомендую вам вместо этого использовать DATE тип MySQL. Как объясняется в типах DATE , DATETIME и TIMESTAMP :

    Тип DATE используется для значений с частью даты, но без временной части. MySQL извлекает и отображает значения DATE в 'YYYY-MM-DD' . Поддерживаемый диапазон – от '1000-01-01' до '9999-12-31' .

    Тип DATETIME используется для значений, содержащих как дату, так и время. MySQL извлекает и отображает значения DATETIME в 'YYYY-MM-DD HH:MM:SS' . Поддерживаемый диапазон: '1000-01-01 00:00:00' до '9999-12-31 23:59:59' .

    Тип данных TIMESTAMP используется для значений, содержащих как дату, так и время. TIMESTAMP имеет диапазон '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC.

Вы должны подумать о создании метки времени с этой даты witk mktime ()

например:

 $date = explode('/', $_POST['date']); $time = mktime(0,0,0,$date[0],$date[1],$date[2]); $mysqldate = date( 'Ymd H:i:s', $time ); 
 $date_field = date('Ym-d',strtotime($_POST['date_field'])); $sql = mysql_query("INSERT INTO user_date (column_name,column_name,column_name) VALUES('',$name,$date_field)") or die (mysql_error()); 

Вы должны убедиться, что формат даты – YYYY-MM-DD на выходе jQuery. Я вижу, что jQuery возвращает MM-DD-YYYY, который не является допустимым форматом даты MySQL, и поэтому он возвращает ошибку.

Чтобы преобразовать его вправо, вы можете сделать это:

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

Затем вы получите форматированную дату, которая будет действительным форматом MySQL, который составляет ГГГГ-ММ-ДД, т.е. 2012-08-25

Я бы также рекомендовал использовать mysql_real_escape_string при вставке данных в базу данных, чтобы предотвратить инъекции SQL в качестве быстрого решения или лучше использовать PDO или MySQLi .

Ваш запрос на вставку с использованием mysql_real_escape_string должен выглядеть примерно так:

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

Простейшим методом является

 $dateArray = explode('/', $_POST['date']); $date = $dateArray[2].'-'.$dateArray[0].'-'.$dateArray[1]; $sql = mysql_query("INSERT INTO user_date (column,column,column) VALUES('',$name,$date)") or die (mysql_error()); 

Получить объект даты из jquery date picker, используя

 var myDate = $('element').datepicker('getDate') 

Для mysql дата должна быть в правильном формате. Одним из вариантов, который обрабатывает любые проблемы с часовым поясом, является использование функции moment.js

 moment(myDate).format('YYYY-MM-DD HH:mm:ss') 

Попробуйте что-то вроде этого ..

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

Прежде всего сохраните $date=$_POST['your date field name'];

 insert into **Your_Table Name** values('$date',**other fields**); 

Вы должны содержать дату в одиночной коте ('')

Надеюсь, это поможет.