php mktime溢出
<?php $y = 2038; $m = 3; $d = 5; $h = 1; $f = 24; $times=mktime($h,$f,0,$m,$d,$y); $timed=date("Y-m-d H:i:s",$times); echo '$y:'.$y.'<br>$m:'.$m.'<br>$d:'.$d.'<br>$h:'.$h.'<br>$f:'.$f.'<br>'; echo $timed;输出结果:
$y:2038 $m:3 $d:5 $h:1 $f:24 1970-01-01 08:00:00
在使用mktime()之后,结果是1970年,也就是溢出了。
原因:
一个整型的变量所能保存的最大时间为 2038 年01月19 日 03:14:07。超过这个时间后,整型数值将会溢出。
从 1970 年 01 月 01 日开始,到世界标准时 2038 年 01 月 19 日星期二凌晨 03:14:07 超过 2^31 – 1。
2^31 – 1 就是0x7FFFFFFF,相信很多编程员都看过,在 32 位系统里,这表示最大的有符号整数。
如果用它来表示秒数,大概相当于 68.1 年,从 1970 年到 2038 年刚好是这个数。
PHP5.2以后的版本中引入了DateTime类:
<?php $date = '2038-3-5'; $format = 'Y-m-d H:i'; $mydate2 = new DateTime($date); echo '<p>正常时间:'.$mydate2->format($format).'</p>'; echo '时间溢出:'.date('Y-m-d H:i',strtotime($date));
参考链接:https://www.yuzhe.name/library/item-176.html