在PHP中转换的01-01-2039之后的日期显示为01-01-1970



我使用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/yd-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');

相关内容

  • 没有找到相关文章

最新更新