2015-01-10 5 views
0

Я знаю, что этот вопрос задан несколько раз, но ничего не работает для меня.Преобразование формата даты для SQL

Я хочу вытащить дату из ввода и сохранить ее в моей БД (MySQLi).

Это то, что я пытался

$ses_s = $_POST['ses_date_s']; 
$ses_n_s = date("Y-m-d", strtotime($ses_s)); 
$q = 'INSERT INTO date_t (ses_date_s,) VALUES (?)'; 
$stmt = mysqli_prepare($dbc, $q); 
mysqli_stmt_bind_param($stmt, 's', $ses_n_s); 
mysqli_stmt_execute($stmt); 

Но это не будет работать.

Дата Вхожу: 17/07/2014 (эхо $ ses_s)

Дата I преобразуются: 1970-01-01 (Unix старт) ($ ses_n_s)

Что я делаю неправильно?

P.S. Как потянуть дату в обратном порядке, я хочу, чтобы дата отображалась d/m/Y, а не Y/m/d (как в БД)?

Заранее спасибо.

EDIT:

Я нашел проблему до (спасибо Джонатана) я использовал дд/мм/гггг не мм/дд/ие

Так что, если я могу изменить мой вопрос, как я могу конвертировать dd/mm/yyy до yyyy/mm/dd

ответ

2

Maverick вы могли бы взорвать дату POST, которые затем можно было бы положить в порядке, вам нужно данные:

$ses_s = $_POST['ses_date_s']; //'17/07/2014'; 
$sespieces = explode("/", $ses_s); 
$ses_n_s = $sespieces[2]."-".$sespieces[1]."-".$sespieces[0]; //2014-07-17 
1

У вас есть две проблемы с кодом.

1) выпуск с инструкцией вставки, есть ошибочный, после ses_date 2) формат даты/времени передан неправильно.

$q = 'INSERT INTO date_t (ses_date_s,) VALUES (?)'; 

должен быть

$q = 'INSERT INTO date_t (ses_date_s) VALUES (?)'; 

StrToTime считает локаль, проходя дд/мм/гггг (канадский стандарт) не является широко признанным, он ожидает, что это будет мм/дд/гггг (нас стандарт) в большинстве случаев.

Я бы порекомендовал вам не полагаться на strtotime для создания временных меток и передавать данные в предпочтительном формате mysql или передавать фактическую метку времени.

Что касается фактического получения даты из базы данных, strtotime отлично работает с данными из mysql, поскольку она будет распознана правильно.

Итак, когда вы вытаскиваете дБ, вы можете это сделать.

echo date('d/m/Y' strtotime($date)); 
+0

Не возражаю (,) там случайно, потому что у меня есть несколько значений, но я удалил их для четкого кода. Я нашел проблему, я ввел дату dd/mm/yyyy not mm/dd/yyyy ... Поэтому, если я могу изменить свой вопрос, как преобразовать dd/mm/yyy в yyyy/mm/dd – Maverick

0

$ _POST [ 'ses_date_s'] является строка но дата() требует целочисленное (Отметка времени Unix). Вы можете преобразовать первый в последний, используя strtotime(), хотя он ожидает только даты, следуя американской конвенции в мм/дд/гг. Объект DateTime имеет более сложные возможности для парсинга.

Смежные вопросы