PHP mysql Wstaw format daty

Im using jQuery datepicker format datepicker to 08/25/2012

Mam bĹ ' Ä ™ dy przy wstawianiu do mojej bazy wstawia tylko 0000-00-00 00 00 00

Moje kody to

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

Jestem pewien, że moja wkładka jest poprawna....

Author: Butternut, 2012-08-25

8 answers

Jak podano w literały daty i czasu:

MySQL rozpoznaje DATE wartości w tych formatach:

  • Jako ciąg znaków w formacie 'YYYY-MM-DD' lub 'YY-MM-DD'. Dozwolona jest" luźna " składnia: każdy znak interpunkcyjny może być używany jako ogranicznik między częściami daty. Na przykład, '2012-12-31', '2012/12/31', '2012^12^31', i '2012@12@31' są równoważne.

  • Jako ciąg znaków bez ograniczników w formacie 'YYYYMMDD' lub 'YYMMDD', pod warunkiem, że string ma sens jako data. Na przykład, '20070523' i '070523' są interpretowane jako '2007-05-23', ale '071332' jest nielegalne (ma nonsensowne części miesiąca i dnia) i staje się '0000-00-00'.

  • Jako liczba w formacie YYYYMMDD lub YYMMDD, pod warunkiem, że liczba ma sens jako data. Na przykład, 19830905 i 830905 są interpretowane jako '1983-09-05'.

Dlatego łańcuch {[28] } nie jest poprawnym literałem daty MySQL. Masz cztery opcje (w jakiejś niejasnej kolejności preferencje, bez dalszych informacji o Twoich wymaganiach):

  1. Skonfiguruj Datepicker, aby podawał daty w obsługiwanym formacie przy użyciu altField wraz z jego altFormat opcja :

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

    Lub, jeśli jesteś zadowolony, że użytkownicy widzą datę w formacie YYYY-MM-DD, po prostu ustaw dateFormat opcja zamiast:

    $( "selector" ).datepicker({
        dateFormat: "yyyy-mm-dd"
    });
    
  2. Użyj MySQL ' S STR_TO_DATE() funkcja do konwersji string:

    INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
    
  3. Konwertuj łańcuch otrzymany z jQuery na coś, co PHP rozumie jako datę, na przykład DateTime obiekt:

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

    A potem albo:

    • Uzyskaj odpowiedni sformatowany ciąg znaków:

      $date = $dt->format('Y-m-d');
      
    • Uzyskaj znacznik czasu Uniksa:

      $timestamp = $dt->getTimestamp();
      

      Który jest następnie przekazywany bezpośrednio do MySQL ' a FROM_UNIXTIME() funkcja:

      INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
      
  4. Ręczne manipulowanie ciągiem znaków w poprawnym dosłownym:

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

Ostrzeżenie

  1. Twój kod jest podatny na SQL injection. Ty naprawdę powinieneś używać gotowych instrukcji , do których przekazujesz swoje zmienne jako parametry, które nie są oceniane dla SQL. Jeśli nie wiesz o czym mówię, lub jak to naprawić, Przeczytaj historię Bobby Tables .

  2. Również, jak stwierdzono w wstęp do rozdziału podręcznika PHP o funkcjach mysql_*:

    To rozszerzenie jest przestarzałe od wersji PHP 5.5.0 i nie jest zalecane do pisania nowego kodu, ponieważ zostanie usunięte w przyszłości. Zamiast tego należy użyć rozszerzenia mysqli lub PDO_MySQL. Aby uzyskać dalszą pomoc przy wyborze interfejsu API MySQL, zapoznaj się również z przeglądem MySQL API.

  3. Wygląda na to, że używasz kolumny DATETIME lub TIMESTAMP do przechowywania wartości daty; I zalecamy, abyś zamiast tego rozważył użycie typu MySQL DATE. Jak wyjaśniono w DATE, DATETIME, i TIMESTAMP typy :

    Typ DATE jest używany dla wartości z częścią daty, ale bez części czasu. MySQL pobiera i wyświetla wartości daty w formacie 'YYYY-MM-DD'. Obsługiwany zakres to '1000-01-01' do '9999-12-31'.

    Typ DATETIME jest używany dla wartości, które zawierają zarówno część daty, jak i czasu. MySQL pobiera i wyświetla wartości DATETIME w formacie 'YYYY-MM-DD HH:MM:SS'. Obsługiwany zakres to '1000-01-01 00:00:00' do '9999-12-31 23:59:59'.

    Typ danych TIMESTAMP jest używany dla wartości, które zawierają zarówno część daty, jak i czasu. TIMESTAMP ma zakres od '1970-01-01 00:00:01' UTC do '2038-01-19 03:14:07' UTC.

 165
Author: eggyal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:41

Należy rozważyć utworzenie timestamp od tej daty witk mktime()

Eg:

$date = explode('/', $_POST['date']);
$time = mktime(0,0,0,$date[0],$date[1],$date[2]);
$mysqldate = date( 'Y-m-d H:i:s', $time );
 10
Author: Mihai Iorga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-25 08:33:32
$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());
 6
Author: Kishan Chauhan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-06 10:56:37

Musisz upewnić się, że format daty jest RRRR-MM-DD na wyjściu jQuery. Widzę, że jQuery zwraca MM-DD-YYYY, który nie jest prawidłowym formatem MySQL date i dlatego zwraca błąd.

Aby przekonwertować go na właściwy możesz to zrobić:

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

Następnie otrzymasz sformatowaną datę, która będzie prawidłowym formatem MySQL, czyli RRRR-MM-DD, czyli 2012-08-25

Polecam również użycie mysql_real_escape_string podczas wstawiania danych do bazy danych, aby zapobiec zastrzykom SQL jako szybkiemu rozwiązaniu lub lepszemu użyciu PDOlub MySQLi .

Twoje zapytanie Wstaw używając mysql_real_escape_string powinno wyglądać tak:

$sql = mysql_query( "INSERT INTO user_date VALUE( '', '" .mysql_real_escape_string($name). "', '" .mysql_real_escape_string($date). "'" ) or die ( mysql_error() );
 1
Author: Ilia Rostovtsev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:56

Najprostszą metodą jest

$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());
 0
Author: William Worley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-15 02:42:35

Pobranie obiektu date z selektora daty jquery przy użyciu

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

Dla mysql Data musi być w odpowiednim formacie. Jedną z opcji, która obsługuje wszelkie problemy ze strefą czasową, jest użycie chwili.js

moment(myDate).format('YYYY-MM-DD HH:mm:ss')
 0
Author: ykay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-17 08:14:22

Spróbuj czegoś takiego..

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);
 -2
Author: shubham prajapati,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-28 10:19:39

Przede wszystkim sklep $date=$_POST['your date field name'];

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

Musisz zawierać datę w jednym cote ( '" )

Mam nadzieję, że to pomoże.
 -2
Author: Anand Raj Mehta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-04 05:34:21