我有一些代码用于渲染几年来运行良好的日期,现在已经破了。我不知道它是否与我的主机更改版本的PHP有关,或者某种程度上是错误悄悄进入。
基本上,11/30/15
等日期现在呈现为11/30/-1
这是一个正在发生的事情的例子:
$olddate = $row['date'];//in database this looks like:0000-00-00 00:00:00
$newdate = nicedate($olddate);
echo "starting date time: ".$olddate;//displays as 'starting date time: 0000-00-00 00:00:00'
echo "after transforming it with nice date: ".$newdate; //displays as 'after transforming it with nice date: 11/30/-1'
我也尝试过运行strtotime并得到这个:
echo "after transforming it with strtotime: ".nicedate($row['starttime']);//-62169966000
// gets nice data
function nicedate($datetime) {
$niceDate = strtotime($datetime);
$niceDate = date("m/d/y",$niceDate);
return $niceDate;
}
答案 0 :(得分:0)
正如您在此处看到的https://3v4l.org/8gqCK,这实际上取决于您使用的是哪个PHP版本。
PHP会将字符串0000-00-00 00:00:00
呈现给-0001-11-30 00:00:00.000000
这是DateTime的示例输出:
object(DateTime)#1 (3) {
["date"]=>
string(27) "-0001-11-30 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(13) "Europe/Berlin"
}
OUTPUT还取决于时区:
object(DateTime)#1 (3) {
["date"]=>
string(27) "-0001-11-29 23:06:32.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
这将输出:
...好日期:11/29 / -1
此处strtotime():
int(-62169987208)
所以你看到日期函数在不同版本上被更改了,你现在可以做的只是检查日期是0000-00-00 00:00:00
:
function nicedate ( $datetime ) {
if( $datetime == "0000-00-00 00:00:00" ) return "Some value or false?";
...
...
}
您还可以查看 MySQL 模式:NO_ZERO_IN_DATE
由于以下评论而更新了方法:
function nicedate( $datetime ) {
if( !validateDate( $datetime ) ) return "something";
$dateTimeObject = DateTime::createFromFormat('Y-m-d H:i:s', $datetime );
return $dateTimeObject->format( "m/d/y" );
}
function validateDate($date) {
$d = DateTime::createFromFormat('Y-m-d H:i:s', $date);
return $d && $d->format('Y-m-d H:i:s') == $date;
}
复制
这是因为0000-00-00....
不是有效日期。发生的事情很简单,从年,月,日开始......总是从最后一个减去一(1)个。
0000 -1 = -1// year
00 - 1 = 11// month, because 12 is the highest value that datetime recognizes as month
00 - 1 = 30// day, because 31 is the highest value that datetime recognizes as day
小时,分钟,秒,......没关系,因为零是时间的有效值。
这就是为什么它呈现的原因:-0001-11-30 00:00:00.000000