Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mySQl vs.PHP(和Twig),日期部分不完整,呈现错误(2017-01-00截至2016年12月31日)_Php_Mysql_Date - Fatal编程技术网

mySQl vs.PHP(和Twig),日期部分不完整,呈现错误(2017-01-00截至2016年12月31日)

mySQl vs.PHP(和Twig),日期部分不完整,呈现错误(2017-01-00截至2016年12月31日),php,mysql,date,Php,Mysql,Date,我正在开发一个(基本)Symfony web应用程序。 我有一个具有@var\DateTime@ORM\Column(name=“Data”,type=“date”)属性的实体,我需要将不完整的日期存储为2017-01-00和2017-00-00。到目前为止还不错 问题是,{{myentity.mydata | localizeddate('medium'、'none'、'en')}将它们呈现为2016年12月31日的和相应的2016年11月30日;相反,我只想得到2017年1月的和resp20

我正在开发一个(基本)Symfony web应用程序。 我有一个具有
@var\DateTime@ORM\Column(name=“Data”,type=“date”)
属性的实体,我需要将不完整的日期存储为
2017-01-00
2017-00-00
。到目前为止还不错

问题是,
{{myentity.mydata | localizeddate('medium'、'none'、'en')}
将它们呈现为2016年12月31日的
和相应的<代码>2016年11月30日
;相反,我只想得到2017年1月的
和resp<代码>2017

是我做错了什么,还是twig无法处理这种情况?你有没有看到一条快速的出路

注意:问题不是
localizeddate
date('d M Y')
错误呈现

编辑

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

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


thks mario

我创建了一个twigfiddle,向您显示过滤器
日期('M,Y')
应该适合您:

这是我使用的代码:

{% set mydate = '2017-07-31 09:46:10' %}
{{ mydate|date('M, Y') }}
虽然这并没有解决
存储为不完整日期的问题。要做到这一点,您需要向我们展示一些代码

如果必须使用,那么我认为第五个参数是日期格式。Twigfidle没有这种能力。所以我认为你的代码应该是这样的:

{{ 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 %}
您只需使用slice获取所需的
值。看看这个新的Twigfidle,试试看。更改
set mydate
字符串以查看if语句是否正常工作:


编辑#3-基于评论

在twig中,您可以按如下方式格式化和切片:

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

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

这是我使用的代码:

{% set mydate = '2017-07-31 09:46:10' %}
{{ mydate|date('M, Y') }}
虽然这并没有解决
存储为不完整日期的问题。要做到这一点,您需要向我们展示一些代码

如果必须使用,那么我认为第五个参数是日期格式。Twigfidle没有这种能力。所以我认为你的代码应该是这样的:

{{ 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 %}
您只需使用slice获取所需的
值。看看这个新的Twigfidle,试试看。更改
set mydate
字符串以查看if语句是否正常工作:


编辑#3-基于评论

在twig中,您可以按如下方式格式化和切片:

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

谢谢你的答复,但我没有解释我自己。我有数百个日期,其中大部分是完整的,一些是不完整的(2017-01-00,2017-00-00))。我需要以完整的方式呈现完整的D M Y;不完整的,如仅M,Y(当D为00时)或仅Y(当D和M均为00时)。添加了编辑#2。试试看。您可能必须根据自己的设计修改代码。@Alvin thsk,谢谢您的帮助。当然可以,不过我希望它是硬编码的。也许最后一点:你知道为什么2017-01-00被渲染为2016年12月31日吗;2017-00-00为2016年11月30日,而不是2017年1月1日?Thsk数据库中的实际日期值是多少?或者可能它使用了不同的时区,因此是因为它是1月1日,因为时区的差异是前一天-看看吧。还有,我的回答解决了你的问题吗?如果是这样的话,请投赞成票或打勾。@Alvin,很抱歉答复晚了。事实上,你的小提琴之所以能演奏,是因为你传递了一根弦来切分。如果我试图传递一个datetime实体,就会出现“datetime类的对象无法转换为字符串”错误。如果我尝试像myDate.format(dmY)| slice(5,2)这样的东西,我就回到了最初的问题。我是否需要datetime实体的toString方法?具体如何?谢谢你的回答,但我没有解释我自己。我有数百个日期,其中大部分是完整的,一些是不完整的(2017-01-00,2017-00-00))。我需要以完整的方式呈现完整的D M Y;不完整的,如仅M,Y(当D为00时)或仅Y(当D和M均为00时)。添加了编辑#2。试试看。您可能必须根据自己的设计修改代码。@Alvin thsk,谢谢您的帮助。当然可以,不过我希望它是硬编码的。也许最后一点:你知道为什么2017-01-00被渲染为2016年12月31日吗;2017-00-00为2016年11月30日,而不是2017年1月1日?Thsk数据库中的实际日期值是多少?或者可能它使用了不同的时区,因此是因为它是1月1日,因为时区的差异是前一天-看看吧。还有,我的回答解决了你的问题吗?如果是这样的话,请投赞成票或打勾。@Alvin,很抱歉答复晚了。事实上,你的小提琴之所以能演奏,是因为你传递了一根弦来切分。如果我试图传递一个datetime实体,就会出现“datetime类的对象无法转换为字符串”错误。如果我尝试像myDate.format(dmY)| slice(5,2)这样的东西,我就回到了最初的问题。我是否需要datetime实体的toString方法?到底是怎么回事?