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

时间:2015-04-28 11:01:37

标签: php date

事先,我已经读过这个问题:

How to prevent PHP to convert a DateTime object with 0000-00-00 value to -0001-11-30

但是当我运行此代码时,我没有为什么 0000-00-00 00:00:00更改为-0001-11-30 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:00尝试时,我得到:

0000-11-30 00:00:00

和0001-01-01 00:00:00我得到:

0001-01-01 00:00:00

和0000-00-01 00:00:00:

-0001-12-01 00:00:00

是否有任何具体原因导致它在不存在的日期之前总是一年/一天/一个月?

函数date_createdate_format是否有问题?

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

3 个答案:

答案 0 :(得分:4)

就像@Mark Ba​​ker说的那样,0000-00-00 00:00:00是一个无效的日期,因为没有月零,没有零日....所以它的第1个月(1月) - 1(上一年的12月)和第1 - 1天(前一个月的最后一天,11月30日)。

如果您在date_create中看到与此行为足够接近。它表示DateTime识别任意数字最多12 作为[month],任意数字最多31 一个[day];它会将结果日期计算为[day]开始后的[month]天。这意味着当创建的datetime对象的天数超过该月份的天数时,日期将超出月末。如果您创建的日期是无效日期,这也适用。 :)

答案 1 :(得分:1)

这是php中DateTime函数的已知问题。日期时间函数没有正确的错误处理。

strtotime等其他功能可以正确处理它。

您可以参考this以获取更多参考资料。

答案 2 :(得分:-2)

可以是您的服​​务器时区,也可以是时间调整。

尝试(重新)设置时区

<?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();
?>

http://php.net/manual/en/function.date-default-timezone-set.php