Php 为什么0000-00-00:00:00返回-0001-11-30 00:00:00?

Php 为什么0000-00-00:00:00返回-0001-11-30 00:00:00?,php,date,Php,Date,在此之前,我已经读过这个问题: 但是当我运行此代码时,我不明白为什么0000-00-00:00:00:00更改为-0001-11-30 00:00:00:00: $date = date_create('0000-00-00 00:00:00'); echo date_format($date, 'Y-m-d H:i:s'); 当我尝试使用0001-00-00:00:00时,我得到: 0000-11-30 00:00:00 0001-01-01 00:00:00 通过0001-01-01

在此之前,我已经读过这个问题:

但是当我运行此代码时,我不明白为什么0000-00-00:00:00:00更改为-0001-11-30 00:00:00:00:

$date = date_create('0000-00-00 00:00:00');
echo date_format($date, 'Y-m-d H:i:s');
当我尝试使用0001-00-00:00:00时,我得到:

0000-11-30 00:00:00
0001-01-01 00:00:00
通过0001-01-01 00:00:00,我得到:

0000-11-30 00:00:00
0001-01-01 00:00:00
以及0000-00-01 00:00:00:

-0001-12-01 00:00:00
为什么总是比不存在的日期早一年/天/月,有什么具体的原因吗

功能或功能是否有问题


我注意到时间显示正确,这可能是因为时间00:00:00存在。

可能是您的服务器时区,也可能是时间调整

尝试(重新)设置时区

<?php
// get the existing timezone
echo date_default_timezone_get();

// set up the correct one for your location
date_default_timezone_set("Europe/Dublin");

// check if new timezone was applied
echo date_default_timezone_get();
?>


这是php中DateTime函数的一个已知问题。datetime函数没有正确的错误处理

其他函数,如strotime,可以正确处理它


你可以参考更多的参考资料。

就像@Mark Baker说的,
0000-00-00 00:00:00
是无效的日期,因为没有零月零日。。。。所以是第1个月(1月-1月)(上一年的12月)和第1-1天(到上个月的最后一天,即11月30日)


如果你对这一行为有足够的了解。它表示
DateTime
最多12个的任何数字识别为
[月]
,将最多31个的任何数字识别为
[日]
;它计算得出的日期为
[月]
开始后的
[天]
天。这意味着,当创建的
datetime
对象的天数超过该月的天数时,该日期将超过月底。如果您创建的日期无效,此项也适用。:)

它试图更正你给它的日期。类似于通过向年中添加1来更正12个月以上的月份,它通过从年中减去1来更正1以下的月份。当天也一样。
0000-00-00 00:00:00
是无效日期,因为没有零月份,也没有零日期。。。。所以现在是第1个月(1月-1月)(前一年的12月)和第1-1天(前一个月的最后一天,即11月30日)。。。。这是记录在案的行为<代码>小于1的值(包括负值)表示上个月的天数,因此0表示上个月的最后一天,-1表示前一天,等等。大于相关月份天数的值表示下个月的适当日期.@MarkBaker是date\u create或date\u format这样做的,你可能知道它为什么这样做吗?不,它什么都不做。注意:无论我得到什么,显然都是PHP中的正常行为。我在问它为什么会这样。在
date\u create()
函数中将“
0000-00-00:00:00
”更改为“
0000-00-00:00 GMT
”怎么样?我知道
0000-00-00-00:00
是无效的。只是说说而已。虽然我没有看到关于评论的注释很好,但它没有解释为什么会这样做。这种行为就像手册上说的,就像url@chandres_酷的回答:)这是一个“问题”和“错误”还是一个记录在案的行为是有争议的。(我知道,陈词滥调的功能-不是一个错误的回应…@Loko简言之:它在做时间数学。超过12个月将滚动到下一年,少于1个月将滚动到上一年,依此类推
mktime
也有同样的功能,这显然是一个特性。@deceze很抱歉我把评论读错了。我似乎不明白他们为什么那样做。当然,你不必回答这个问题。@Loko我们不能推测最初实现者的意图。有人认为它在某种程度上是有用的。可以说,有时的确如此。可以说PHP也不总是实现最好的想法。。。