当数据库中的日期时间为 0000-00-00 00:00:00 时,Symfony Twig (3) 呈现错误的日期时间
Symfony Twig (3) renders wrong datetime when datetime in database is 0000-00-00 00:00:00
我正在尝试学习 Symfony 5,其中包括 Twig。现在我偶然发现了一个我真的不知道如何解决的问题。
我为我的用户 table 添加了一个日期时间列 (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 的日期呈现为 Dec 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 语句中?
我也很想知道为什么 twig 中显示的日期与从数据库中错误返回的日期不同:
0001-11-30 00:00:00 不应该是 Nov 31, 1, 12:00:00 AM 而不是 12 月 2 日,12:00:00 上午 ?
非常感谢您的帮助!
在公历发明和 clocks/timezones 准确同步之前,我们日历上的日期和时间变得混乱。 1 年当时不存在,是在事后发明的。另请注意,时区偏移量为 +0:53 分钟。
我的猜测是,这与 0000-00-00 00:00:00
被转换为 unix 时间戳,然后再次重新格式化为日期时间有关。鉴于 0000-00-00 00:00:00
从未存在过,进行这些转换的算法可能不完全相同或不可逆 MySQL 和 PHP.
我的建议是不要这样做。如果您需要一个值来表示 'no time',请使用 NULL
.
我正在尝试学习 Symfony 5,其中包括 Twig。现在我偶然发现了一个我真的不知道如何解决的问题。
我为我的用户 table 添加了一个日期时间列 (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 的日期呈现为 Dec 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 语句中?
我也很想知道为什么 twig 中显示的日期与从数据库中错误返回的日期不同:
0001-11-30 00:00:00 不应该是 Nov 31, 1, 12:00:00 AM 而不是 12 月 2 日,12:00:00 上午 ?
非常感谢您的帮助!
在公历发明和 clocks/timezones 准确同步之前,我们日历上的日期和时间变得混乱。 1 年当时不存在,是在事后发明的。另请注意,时区偏移量为 +0:53 分钟。
我的猜测是,这与 0000-00-00 00:00:00
被转换为 unix 时间戳,然后再次重新格式化为日期时间有关。鉴于 0000-00-00 00:00:00
从未存在过,进行这些转换的算法可能不完全相同或不可逆 MySQL 和 PHP.
我的建议是不要这样做。如果您需要一个值来表示 'no time',请使用 NULL
.