PHP Datetime не работает должным образом

#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…