#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 и тому подобное, я принимаю эти вещи как должное.