2016-06-20 2 views
0

Я использую Laravel для создания приложения.Добавление строки часа в Datetime PHP

Я позволю своим пользователям выбрать дату и время в форме с помощью ввода. Я сохраняю оба в двух разных полях в моей базе данных.

Поле даты сохраняется как: 2016-06-20 время поле сохраняется как: 17:30:00

Теперь я хотел бы объединить эти два и сохранить их в свою базу данных, как это: 2016-06-20 17:30:00 так, что я могу выполнить некоторую логику в теме.

Как я использую Laravel, я думал, что это будет возможно с использованием Carbon, но после нескольких раз прочитав документацию, я не могу найти способ объединить эти два.

+0

Если вы используете 'mysql', то почему вы не используете тип' datetime' в базе данных? –

ответ

0

Попробуйте:

$date = '2016-06-20'; 
$time = '17:30:00'; 
$combinedDateTime = $date . ' ' . $time; 
$time = date("m/d/Y h:i:s A T", strtotime($combinedDateTime)); 
$time = new \DateTime($time); 

, если вы print_r($time), он будет показывать объект DateTime:

DateTime Object ([date] => 2016-06-20 17:30:00.000000 [timezone_type] => 3 [timezone] => UTC) 

Надеется, что это помогает.

0

Вы можете сделать строку с обеих данных затем преобразовать датировать строковое

$datetime = $date." ".$time; 
$datetime = date('Y-m-d H:i:s', strtotime($datetime)); 

Теперь вы можете вставить эту переменную в даты и времени поля базы данных

+0

Хорошо, мне, возможно, придется обновить свой первоначальный вопрос, но дело в том, что так. Я получаю дату из моей формы в строчном формате. Мне нужно преобразовать это в DateTime или Carbon, поэтому я могу использовать change() или addDay() в цикле, чтобы добавить один день каждый раз, когда цикл повторяется. Всякий раз, когда цикл обновляет дату, мне нужно сохранить эту новую дату в моей базе данных при добавлении поля времени за ней. – LucasPoignon

+0

Попробуйте сделать это: 'while (condition) {dateadd ($ datetime, date_interval_create_from_date_string ('1 days');)} ' – Saul

0

Вы имеете в виду объединить два в одно поле в БД? Если это так, вам не нужен какой-либо специальный интерфейс:

mysql> create table d (dt datetime, d date, t time); 
Query OK, 0 rows affected (0.02 sec) 

mysql> insert into d (d, t) values ('2016-06-20', '17:30:00'); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from d; 
+------+------------+----------+ 
| dt | d   | t  | 
+------+------------+----------+ 
| NULL | 2016-06-20 | 17:30:00 | 
+------+------------+----------+ 
1 row in set (0.00 sec) 
mysql> update d set dt = concat(d, ' ', t); 
Query OK, 1 row affected (0.01 sec) 
Rows matched: 1 Changed: 1 Warnings: 0 

mysql> select * from d; 
+---------------------+------------+----------+ 
| dt     | d   | t  | 
+---------------------+------------+----------+ 
| 2016-06-20 17:30:00 | 2016-06-20 | 17:30:00 | 
+---------------------+------------+----------+ 
1 row in set (0.00 sec) 
+0

Это решение кажется действительно приятным, хотя я бы предпочел сделать логику в PHP вместо запроса. Я должен признать, что я не уверен, как это сделать в Laravel – LucasPoignon

0

Использовать углерод вместо Datetime php. click here для углеродного документа.

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