mySQl与PHP(和Twig),部分不完整的日期,错误的渲染(2017-01-00截至2016年12月31日)

时间:2017-07-31 15:56:51

标签: php mysql date

我正在开发一个(基本的)Symfony网络应用程序。 我有一个@var \DateTime @ORM\Column(name="Data", type="date")属性的实体,我需要将不完整的日期存储为2017-01-002017-00-00。到目前为止一切都很好。

问题是{{ myentity.mydata|localizeddate('medium', 'none', 'en' ) }}将它们呈现为Dec 31, 2016并且分别为。 Nov 30, 2016;相反,我想得到Jan, 2017和resp。 2017

我做错了什么,或者是树枝无法处理这种情况?你看到了快速的出路吗?

注意:问题不是localizeddatedate('d M Y')也是误导。

编辑

现在,我认为这个问题可以追溯到mysql和PHP。请查看以下屏幕截图,它们显示了php如何将2017-00-00转换为Nov 30, 2016。我看到有人有出路(this post),但我不知道如何在我的Symfony应用程序中使用后者。

mysql

php

其中formatDatabaseDate($date, $delimiter = '/')来自this post

results

thks mario

1 个答案:

答案 0 :(得分:0)

我已经创建了一个twigfiddle来向您展示过滤器date('M, Y')应该适合您:

https://twigfiddle.com/155jb9

这是我使用的代码:

{% set mydate = '2017-07-31 09:46:10' %}
{{ mydate|date('M, Y') }}

虽然这并未解决storing作为不完整日期的问题。为此,您需要向我们展示一些代码。

如果你必须使用Intl Extension,那么我认为第五个参数是日期格式。 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 %}

您只需使用切片根据需要获取daymonth值。看到这个新的twigfiddle尝试一下。更改set mydate字符串以查看if语句是否正常工作:

https://twigfiddle.com/r9m3j3

编辑#3 - 基于评论

在树枝中你会像这样格式化和切片:

{{ myDate|date('Y-M-D H:I:S')|slice(5,2) }}