PHP Y2K38 (2038年) 问题
Posted ZjFree-自由自在
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP Y2K38 (2038年) 问题相关的知识,希望对你有一定的参考价值。
php 的 strtotime(‘2100-01-01‘); 转换失败;经查询是因为32位系统的 Y2K38问题;
Y2K38 问题:当时间大于 2038年01月19日03:14:07 时,strtotime和time、date函数在32系统下(PHP的版本)将导致转换失败;
问题解决办法:使用 new DateTime(); 来做时间转换处理;代码如下:
<?php /** * 替换系统 strtotime, Y2K38问题 */ function _strtotime($dt = null, $modify = ‘‘) { $d = null; if (empty($dt)) { $d = new DateTime(); } else if (is_numeric($dt)) { $d = new DateTime(‘@‘ . $dt); } else { $d = new DateTime($dt); } $d -> setTimeZone(new DateTimeZone(‘PRC‘)); if ($modify != ‘‘) { $d -> modify($modify); } return $d -> format(‘U‘); } /** * 替换系统 date, Y2K38问题 */ function _date($format = ‘Y-m-d H:i:s‘, $dt = null) { $d = new DateTime(‘@‘ . _strtotime($dt)); $d -> setTimeZone(new DateTimeZone(‘PRC‘)); return $d -> format($format); }
// 测试代码 echo _strtotime(‘2100-01-01‘) . PHP_EOL; echo _strtotime(‘2100-01-01‘, ‘+10day‘) . PHP_EOL; echo _date() . PHP_EOL; echo _date(‘Y-m-d‘, ‘2100-01-01‘) . PHP_EOL; $dt = _strtotime(‘2100-01-01‘, ‘+10day‘); echo _date(‘Y-m-d‘, $dt) . PHP_EOL; $dt -= 24*3600; echo _date(‘Y-m-d‘, $dt) . PHP_EOL;
以上是关于PHP Y2K38 (2038年) 问题的主要内容,如果未能解决你的问题,请参考以下文章
64位MySQL的PHP 2038年问题无法通过PHPMyAdmin插入日期
当碰到unix纪元问题时strtotime怎么转时间戳(DateTime类的使用方法)
Leetcode刷题Python LeetCode 2038. 如果相邻两个颜色均相同则删除当前颜色