我使用的是php 5.3.8版 并且mktime对我不起作用
这是代码
$dated= mktime(0,0,0,11,5,2038);
var_dump($dated);
输出为bool(false) 请建议我修复
答案 0 :(得分:4)
mktime返回时间戳,这是一个整数(在PHP中,它实际上是一个有符号整数)。因此,32位系统的最大可能时间戳为19 Jan 2038 03:14:07 UTC
(之后发生整数溢出)。对于更大的时间戳,您需要64位整数。
答案 1 :(得分:3)
来自PHP manual:
在PHP 5.1.0之前,任何人都不支持负时间戳 已知版本的Windows和其他一些系统。因此 有效年限范围限于1970年至2038年。
一种可能的解决方案是使用ADOdb Date Time Library。该库通过用PHP浮点数(通常为64位)替换本机函数的有符号整数(通常为32位)来克服这些限制。
答案 2 :(得分:2)
使用C / C ++库转换时间的三个重要事项。
标准库中的gmtime()或localtime()从time_t转换为struct tm,但time_t的分辨率是epoch的秒数。所以小数秒不计算在内。
mktime()从struct tm向后转换为time_t,但如果输入日期超出范围,则返回-1。 (请参阅2038年的问题:http://en.wikipedia.org/wiki/Year_2038_problem)
如果你没有使用64位时间戳,即使你在64位机器上运行程序,你仍然有2038年的问题。有64位版本的功能,如gmtime64(),localtime64(),mktime64()可以解决年度超出范围的问题。 (参见页面:http://pic.dhe.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Frtref%2Fmktime64.htm)
使用boost库的答案无法解决2038年的问题。从其页面注释:“内部boost :: gregorian :: date存储为32位整数类型。”