负浮动的日期

时间:2013-12-25 17:38:14

标签: php date datetime timestamp

我在变量

中有时间戳
$data = (float) -2208988800;

是否可以根据此数据创建正确的日期? date("d.M.Y", $data)返回“07.02.2036”

1 个答案:

答案 0 :(得分:2)

您得到结果07.02.2036,因为您使用的是x86(32位计算机),其中整数范围从-21474836482147483647(请参阅echo PHP_INT_MAX;)。 PHP内部将date()函数的第二个参数转换为整数,因此在32位机器上,字符串或浮点-2208988800将变为整数2085978496,即日期为2036-02-07,{{ 3}}

echo date('Y-m-d', -2208988800);
# 2036-02-07 (x86)
# 1900-01-01 (x64)

demo

run code on x86 machine

如果您希望在两台计算机x86和x64上使用负时间戳,请使用run code on x64 machine扩展名:

$dt = new DateTime('@-2208988800');
echo $dt->format('Y-m-d');

DateTime

请注意,对于unix纪元之前的日期,方法getTimestamp()将返回false,其中方法format('U')将返回正确的时间戳编号。

var_dump( $dt->format('U') );    # -2208988800
var_dump( $dt->getTimestamp() ); # false

demo