我使用php date((函数转换了日期01-01-2039:
echo date("d-m-Y",strtotime('01-01-2039'));
输出显示为:01-01-1970
有什么解决方案吗?
这是来自评论对话的回答
该问题是由Unix时间戳Epoch问题引起的。
本机PHP的解决方案是使用64位PHP版本来正确处理这个特定的整数溢出。
echo (PHP_INT_SIZE===8)?"64 bit ":"32 bit ";
上面的代码显示了PHP的版本。
如果存在32位PHP,则需要用64位PHP 代替
除了@Martin的回答,我还想指出使用strtotime
时某些日期格式所造成的歧义。
手册中:
m/d/y或d-m-y/d/y;而如果分隔符是短划线(-(或点(.(,然后是欧洲d-m-y格式假设。但是,如果年份是以两位数的格式给出的,并且分隔符是短划线(-(,日期字符串被解析为y-m-d。
为了避免潜在的歧义,最好使用ISO 8601(YYYY-MM-DD(日期或CCD_ 2(如果可能(。
$dt = DateTime::createFromFormat('d-m-Y', '01-01-2039');
echo $dt->format('d-m-Y');