Как правильно преобразовать строку «06.03.2019 3:40:19 PM» в Laravel / Eloquent типа datetime?

#php #datetime #laravel-5

#php #дата и время #laravel-5

Вопрос:

У меня есть строка «06.03.2019 3:40:19 PM», которую я хочу преобразовать в тип даты и времени Laravel / Eloquent.

Есть ли способ сделать это, не извлекая все маленькие фрагменты строки и не перестраивая снова в желаемый формат?

Комментарии:

1. Можете ли вы поделиться более подробной информацией? В каких частях вашего кода вы хотите выполнить такое преобразование?

2. Это 3/6 6 марта или 3 июня?

Ответ №1:

Вы можете использовать Carbon, который уже является частью любой установки Laravel.

http://carbon.nesbot.com/docs/#api-getters

Если у вас есть строка datetime и вы хотите использовать ее с Carbon экземпляром, вы можете сделать:

 $date = CarbonCarbon::createFromFormat('j/n/Y g:i:s A', '3/6/2019 3:40:19 PM');
  

Затем вы можете сделать что-то вроде:

 $date->format('Y-m-d')
$date->format('H:i:s')
  

Комментарии:

1. Если он получает строки «06.03.2019 3:40:19 PM», вы как бы жульничаете, настраивая ее на «2016-11-01 15: 04:19»

2. @RiccardoCedrola Да. Здесь поможет Carbon createFromFormat . Я отредактировал это в.

3. С использованием carbon обнаружены неожиданные данные. Найдены неожиданные данные. Найдены неожиданные данные. Конечные данные — .. Это код $date = CarbonCarbon::createFromFormat(‘Y-m-d H: m:s’, ‘06.03.2019 3:40:19 PM’);

4. @zwitterion Ваш формат не соответствует Y-m-d H:m:s . В ответе я указал правильный формат (и точный код, который работает для вашей конкретной строки даты / времени).

Ответ №2:

Решение в одну строку:

date('Y-m-d H:i:s', strtotime('3/6/2019 3:40:19 PM')));

Если вы хотите использовать Laravel’s Carbon, вы можете взглянуть на документы api: я нашел пример, похожий на вашу ситуацию, который также анализирует ‘pm’

 $date = Carbon::createFromIsoFormat('!YYYY-MMMM-D h:mm:ss a', '2019-January-3 6:33:24 pm', 'UTC');
echo $date->isoFormat('M/D/YY HH:mm'); // 1/3/19 18:33
  

Ответ №3:

Используйте strtotime() функцию PHP.
strToTime($string)

И если вы хотите изменить формат, вы можете использовать date() функцию.
date('Y-m-d H:i:s', strtotime($string))

Это избавляет вас от необходимости устанавливать новые библиотеки, и вы можете изменить формат даты любым удобным для вас способом в функции date

Комментарии:

1. вам нужно поставить H:i:s вместо h:i:s , иначе strtotime() ‘PM’ не анализируется

2. Ах да, спасибо, что указали на это @RiccardoCedrola, я пропустил это

3. strtotime может сгенерировать неправильную дату, хотя, поскольку OP 3/6 может быть 6 марта или 3 июня, в зависимости от страны. Что касается «новых библиотек», Laravel включает Carbon в качестве основного компонента.

4. Я согласен, всегда безопаснее определять формат даты, которую вы передаете в виде строки, поэтому использование DateTime::createFromFormat or также Carbon::createFromFormat всегда безопаснее, но я думаю, что он мог бы легко понять это, просмотрев документы, без того, чтобы кто-либо давал ему «готовый код»

5. И да, ребята, то, что вы говорите, правда. Я полагаю, что теперь, когда я использую такие вещи, как Carbon и тому подобное, я принимаю эти вещи как должное.