Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

  • Настройте Datepicker для предоставления дат в поддерживаемом формате с помощью altField вместе с altFormat:

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

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

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

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

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

    а затем либо:

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

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

      $timestamp = $dt->getTimestamp();
      

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

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

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

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

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

  • Также, как указано в введение в главах руководства PHP по функциям mysql_*:

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

  • Кажется, вы используете столбец DateTime или TIMESTAMP для хранения значения даты; Я рекомендую вам вместо этого использовать MySQL DATE. Как описано в 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 до '2038-01-19 03:14:07' UTC.

Ответ 2

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

например:

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

Ответ 3

$date_field         = date('Y-m-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());

Ответ 4

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

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

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

Затем вы получите форматированную дату, которая будет действительным форматом MySQL, который является YYYY-MM-DD, то есть 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() );

Ответ 5

Самый простой способ -

$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());

Ответ 6

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

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

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

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

Ответ 7

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

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);

Ответ 8

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

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

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

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