我正在开发一个(基本)Symfony Web 应用程序。
我有一个具有 @var\DateTime @ORM\Column(name="Data", type="date")
属性的实体,我需要将不完整的日期存储为 2017-01 -00
和 2017-00-00
。到目前为止一切顺利。
问题是 {{ myentity.mydata|localizeddate('medium', 'none', 'en' ) }}
将它们呈现为 Dec 31, 2016
和分别。 2016 年 11 月 30 日
;相反,我只想获取 Jan, 2017
和 resp。 2017
。
我做错了什么,还是twig无法处理这种情况?你有快速的出路吗?
注意:问题不在于 localizeddate
,也在于 date('d M Y')
渲染错误。
编辑
现在,我确实认为问题可以追溯到 mysql 和 PHP。请检查以下屏幕截图,它们显示了 php 如何将 2017-00-00
转换为 Nov 30, 2016
。我看到有人有出路( this post ),但我不确定如何在我的 Symfony 应用程序中使用后者。
其中 formatDatabaseDate($date, $delimiter = '/')
来自 this post
谢谢马里奥
最佳答案
我创建了一个 twigfiddle 来向您展示过滤器 date('M, Y')
应该适合您:
这是我使用的代码:
{% set mydate = '2017-07-31 09:46:10' %}
{{ mydate|date('M, Y') }}
尽管这并没有解决存储
作为不完整日期的问题。为此,您需要向我们展示一些代码。
如果您必须使用Intl Extension ,那么我认为第5个参数是日期格式。 Twigfiddle 不具备这种能力。所以我认为你的代码会是这样的:
{{ myentity.mydata|localizeddate('none', 'none', 'en', 'GMT', 'M, Y' ) }}
也许你可以尝试一下?
<小时/>编辑 #2 - 基于评论
如果你想要的话,你应该让你的帖子更清楚,但是我更新了我的 twigfiddle (新的)来满足你的要求。你可以像这样编码:
{% if day == '00' and month == '00' %}
{{ mydate|date('Y') }}
{% elseif day == '00' and month != '00' %}
{{ mydate|date('M, Y') }}
{% else %}
{{ mydate|date('D M Y') }}
{% endif %}
您只需使用切片即可根据需要获取day
和month
值。请参阅这个新的 twigfiddle 来尝试一下。更改 set mydate
字符串以查看 if 语句是否有效:
编辑 #3 - 基于评论
在 twig 中,您可以像这样格式化和切片:
{{ myDate|date('Y-M-D H:I:S')|slice(5,2) }}
关于php - mySQl 与 PHP(和 Twig),部分日期不完整,渲染错误(2017 年 1 月 00 日为 2016 年 12 月 31 日),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45420414/