Symfony Twig (3) отображает неправильное значение datetime, когда datetime в базе данных - 0000-00-00 00:00:00 - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь выучить Symfony 5, и это включает в себя Twig. Но я наткнулся на проблему, и я действительно понятия не имею, как ее решить.
Я добавил столбец даты и времени (createAt) в свою таблицу пользователей. Для уже существующих записей было добавлено 0000-00-00 00:00:00.

Код от сущности пользователя:

/**
 * @ORM\Column(type="datetime", options={"default":"0000-00-00 00:00:00"})
 */
private $createdAt;

Если я сейчас дам дамп результата fetchAll (), я получу запись по умолчанию в CreatedAt обратно следующее (пример одного пользователя):

App\Entity\Users {#519 ▼
  -createdAt: DateTime @-62169987208 {#517 ▼
    date: -0001-11-30 00:00:00.0 Europe/Berlin (+00:53)
  }
  -id: 12
  -name: "Robert"
}

В шаблоне TWIG у меня есть следующее:

        <span class="span-headline">Adding automatically a creation date to a new user written in db</span><br>
    <table class="table-own">
        <tr class="tr-own">
            <th class="th-own table-left">Name</th>
            <th class="th-own table-right">id</th>
            <th class="th-own table-right">Created at</th>
            <th class="th-own table-right"></th>
        </tr>
        {% for user in users %}
            <tr class="tr-own">
                <td class="td-own table-left">{{ user.name }}</td>
                <td class="td-own table-right">{{ user.id }}</td>
                <td class="td-own table-right">{{ user.createdAt|format_datetime() }}</td>
                <td class="td-own table-right"><a href="{{ path('delete_db_id',{'id': user.id}) }}">Delete</a>
                </td>
            </tr>
        {% endfor %}
    </table>
    </p>

Визуализация дат с записью в базе данных. 00:00:00 - De c 2, 2, 12:00:00 AM

Я пытался использовать

{% if createdAt != "-0001-11-30 00:00:00" %}
{{ createdAt|format_datatime
{% endif %}

, чтобы просто отобразить значения с правильной датой, но это не сработало.

Может кто-нибудь сказать мне, почему я не получаю 000-00-00 00:00:00 из базы данных в моем контроллере и если это (легко) исправить, как я могу отфильтровать эти даты в операторе if?
Также мне было бы интересно, почему дата, показанная в ветке, не совпадает с ошибкой возврата из базы данных:
Не следует 0001-11-30 00:00: 00 be 31 ноября 1, 12:00:00 вместо De c 2, 2, 12:00:00 AM ?

Помощь действительно ценится!

1 Ответ

4 голосов
/ 03 мая 2020

Даты и время, указанные в нашем календаре, запутались до того, как изобретение григорианского календаря и часы / часовые пояса были точно синхронизированы. Год 1 никогда не существовал в то время, и был изобретен задолго до факта. Также обратите внимание, что смещение часового пояса составляет +0: 53 минуты.

Я предполагаю, что это как-то связано с преобразованием 0000-00-00 00:00:00 в отметку времени unix, а затем переформатированием в виде даты снова Учитывая, что 0000-00-00 00:00:00 никогда не существовало, алгоритмы для выполнения этих преобразований могут быть не полностью одинаковыми или обратимыми MySQL и PHP.

Я бы предложил не делать этого. Если вам нужно значение, чтобы указать «нет времени», используйте NULL.

...