事先,我已经读过这个问题:
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_create或date_format是否有问题?
我注意到时间以正确的方式显示,这可能是因为时间00:00:00存在。
答案 0 :(得分:4)
就像@Mark Baker说的那样,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)
答案 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