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....
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
lubYYMMDD
, pod warunkiem, że liczba ma sens jako data. Na przykład,19830905
i830905
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):
-
Skonfiguruj Datepicker, aby podawał daty w obsługiwanym formacie przy użyciu
altField
wraz z jegoaltFormat
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 ustawdateFormat
opcja zamiast:$( "selector" ).datepicker({ dateFormat: "yyyy-mm-dd" });
-
Użyj MySQL ' S
STR_TO_DATE()
funkcja do konwersji string:INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
-
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))
-
-
Ręczne manipulowanie ciągiem znaków w poprawnym dosłownym:
$parts = explode('/', $_POST['date']); $date = "$parts[2]-$parts[0]-$parts[1]";
Ostrzeżenie
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 .
-
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.
-
Wygląda na to, że używasz kolumny
DATETIME
lubTIMESTAMP
do przechowywania wartości daty; I zalecamy, abyś zamiast tego rozważył użycie typu MySQLDATE
. Jak wyjaśniono wDATE
,DATETIME
, iTIMESTAMP
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ściDATETIME
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.
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 );
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());
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() );
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());
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')
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);
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.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