簡體   English   中英

Symfony Twig (3) 當數據庫中的日期時間為 0000-00-00 00:00:00 時呈現錯誤的日期時間

[英]Symfony Twig (3) renders wrong datetime when datetime in database is 0000-00-00 00:00:00

我正在嘗試學習 Symfony 5,其中包括 Twig。 Notw我偶然發現了一個我真的不知道如何解決的問題。
我在用戶表中添加了一個日期時間列 (createdAt)。 對於已經存在的條目,添加了 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>

數據庫條目為 0000-00-00 00:00:00 的日期的呈現時間為12 月 2 日、2 日、12:00:00 AM

我試着用

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

只是用正確的日期渲染值,但它不起作用。

有人可以告訴我,為什么我沒有從我的 controller 的數據庫中取回 000-00-00 00:00:00 如果這不是(容易)修復,我如何在 if 語句中過濾這些日期?
我也很感興趣,為什么 twig 中顯示的日期與從數據庫中錯誤返回的日期不同:
0001-11-30 00:00:00不應該是Nov 31, 1, 12:00:00 AM而不是Dec 2, 2, 12:00:00 AM嗎?

非常感謝您的幫助!

在公歷發明和時鍾/時區准確同步之前,我們日歷上的日期和時間會變得混亂。 1 年在當時根本不存在,而且是在事后才發明的。 另請注意,時區偏移量為 +0:53 分鍾。

我的猜測是,這與將0000-00-00 00:00:00轉換為 unix 時間戳,然后再次重新格式化為日期時間有關。 鑒於0000-00-00 00:00:00從未存在,執行這些轉換的算法可能不完全相同或可逆 MySQL 和 PHP。

我的建議是不要這樣做。 如果您需要一個值來指示“沒有時間”,請使用NULL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM