php mktime溢出

2019-5-15 Stone PHP

<?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

标签: php mktime 溢出

评论(0) 浏览(1006)

Copyright © 2019 by 海角孤星 京ICP备15056837号-1