在 PHP 中转换的 01-01-2039 之后的日期显示为 01-01-1970
Dates after 01-01-2039 converted in PHP is shown as 01-01-1970
我使用 php date() 函数转换了日期 01-01-2039:
echo date("d-m-Y",strtotime('01-01-2039'));
输出显示为:01-01-1970
有什么解决办法吗?
This Answer from comment conversation
问题是由 Unix Timestamp Epoch problem 引起的。
本机 PHP 的解决方案是使用能够正确处理此特定整数溢出的 64 位 PHP 版本。
echo (PHP_INT_SIZE===8)?"64 bit ":"32 bit ";
上面的代码显示了 PHP 版本。
如果存在 32 位 PHP,则需要将其替换为 64 位 PHP
除了@Martin 的回答,我想指出使用 strtotime
.
时某些日期格式造成的歧义
在manual中:
Dates in the m/d/y or d-m-y formats are disambiguated by looking at
the separator between the various components: if the separator is a
slash (/), then the American m/d/y is assumed; whereas if the
separator is a dash (-) or a dot (.), then the European d-m-y format
is assumed. If, however, the year is given in a two digit format and
the separator is a dash (-), the date string is parsed as y-m-d.
To avoid potential ambiguity, it's best to use ISO 8601 (YYYY-MM-DD)
dates or DateTime::createFromFormat()
when possible.
$dt = DateTime::createFromFormat('d-m-Y', '01-01-2039');
echo $dt->format('d-m-Y');
我使用 php date() 函数转换了日期 01-01-2039:
echo date("d-m-Y",strtotime('01-01-2039'));
输出显示为:01-01-1970
有什么解决办法吗?
This Answer from comment conversation
问题是由 Unix Timestamp Epoch problem 引起的。
本机 PHP 的解决方案是使用能够正确处理此特定整数溢出的 64 位 PHP 版本。
echo (PHP_INT_SIZE===8)?"64 bit ":"32 bit ";
上面的代码显示了 PHP 版本。
如果存在 32 位 PHP,则需要将其替换为 64 位 PHP
除了@Martin 的回答,我想指出使用 strtotime
.
在manual中:
Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed. If, however, the year is given in a two digit format and the separator is a dash (-), the date string is parsed as y-m-d.
To avoid potential ambiguity, it's best to use ISO 8601 (YYYY-MM-DD) dates or
DateTime::createFromFormat()
when possible.
$dt = DateTime::createFromFormat('d-m-Y', '01-01-2039');
echo $dt->format('d-m-Y');