#php #datetime
#php #datetime
Вопрос:
Я извлекаю данные datetime из mysql, полученные данные из одной строки являются.
2011-04-11 19:31:30
Я хотел переформатировать datetime в, d-m-Y H:i:s
для этого я использую date_format()
приведенный ниже код работает просто отлично.
$date = new DateTime($users['registerDate']);
echo $date->format('d-m-Y H:i:s');
Однако я не хочу идти объектно-ориентированным путем только для переформатирования, потому что я буду использовать код в цикле foreach, а это означает, что мне пришлось бы инициализировать класс DateTime снова и снова.
Я попытался сделать это процедурным способом, используя следующий код.
$date = $users['registerDate'];
echo date_format($date, 'Y-m-d H:i:s');
приведенный выше код у меня не работает и выдает следующую ошибку.
Предупреждение: date_format() ожидает, что параметром 1 будет DateTime, строка, указанная в /Applications/MAMP/htdocs/kokaris/administrator/resources/library/models/users/users.php в строке 21
Что может быть не так?
Данное решение отлично работает для процедурного способа.
echo date('m-d-Y',strtotime($users['registerDate']));
Однако я хотел бы знать, какое из возможных решений будет наилучшим — вышеуказанный процедурный способ или способ ООП.
$date = new DateTime($users['registerDate']);
echo $date->format('d-m-Y H:i:s');
Учитывая, что я буду использовать код в цикле foreach, и это может повторяться более ста раз.
Комментарии:
1. Первым параметром
date_format()
должен быть экземплярDateTime
. Вы передаете ему строку2. В PHP создание экземпляра объекта не является очень дорогостоящей операцией, по крайней мере, по сравнению с другими вещами, которые вы делаете постоянно. Выбирать процедурный код вместо объектно-ориентированного исключительно из соображений производительности глупо в таких языках, как PHP.
3. @tdammers вы уверены, что можно использовать способ ООП для данного условия, я буду использовать его в цикле? например, если мне нужно получить 100 записей, учитывая, что это инициализирует класс 100 раз, для такого условия, как это, не стоит ли использовать только процедурную функцию () ?
4. Вероятно, это было бы прекрасно, но в данной ситуации гораздо лучшим решением является простое использование
date()
— не из соображений производительности, а потому, что его легче читать. Кроме того, 100 итераций — это ничто.
Ответ №1:
Вам не нужен «date_format()»:
echo date('d-m-Y H:i:s', strtotime('2011-04-11 19:31:30'));
//results: 11-04-2011 19:31:30
Ответ №2:
Вы пытаетесь использовать функцию / объект, который является частью класса DateTime, без создания ссылки на класс DateTime.
Для процедурного форматирования взгляните на date()
Ответ №3:
То, что вы ищете, это:
date('d-m-Y H:i:s', strtotime('2011-04-11 19:31:30'));
Взгляните на php-manual. Однако использование методов, которые вы сами предложили, довольно хорошо, поскольку объект DateTime сопоставляется некоторым функциям, написанным на C.
Также PHP Datetime работает должным образом, поскольку date_format — это просто псевдоним Date::format , который точно требует того, что вы не хотите передавать (DateTime-объект).
Честно говоря, мы говорим о PHP…