事先,我已经读过这个问题:
如何防止PHP将带有0000-00-00值的DateTime对象转换为-0001-11-30
但是当我运行这段代码时,我不知道为何 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');
Run Code Online (Sandbox Code Playgroud)
当我用0001-00-00 00:00:00尝试时,我得到:
0000-11-30 00:00:00
Run Code Online (Sandbox Code Playgroud)
和0001-01-01 00:00:00我得到:
0001-01-01 00:00:00
Run Code Online (Sandbox Code Playgroud)
和0000-00-01 00:00:00:
-0001-12-01 00:00:00
Run Code Online (Sandbox Code Playgroud)
是否有任何具体原因导致它在不存在的日期之前总是一年/一天/一个月?
函数date_create或date_format有问题吗?
我注意到时间以正确的方式显示,这可能是因为时间00:00:00存在.
就像@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
创建的对象的天数超过该月的日期时,日期将超出该月末。如果您创建的日期是无效日期,这也适用。:)
Cip*_*ian -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();
?>
Run Code Online (Sandbox Code Playgroud)
http://php.net/manual/en/function.date-default-timezone-set.php
归档时间: |
|
查看次数: |
7518 次 |
最近记录: |