Php 负浮动日期

Php 负浮动日期,php,date,datetime,timestamp,Php,Date,Datetime,Timestamp,我在变量中有一个时间戳 $data = (float) -2208988800; 是否可以根据此数据创建正确的日期? date(“d.M.Y”,$data)返回“07.02.2036”您得到的结果是07.02.2036,因为您在x86(32位机器)上,其中整数范围是从-2147483648到2147483647(请参见echo PHP\u INT\u MAX;)。PHP内部将date()函数的第二个参数强制转换为整数,因此在32位机器上,字符串或浮点-220898880将变为整数2085978

我在变量中有一个时间戳

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

您得到的结果是
07.02.2036
,因为您在x86(32位机器)上,其中整数范围是从
-2147483648
2147483647
(请参见
echo PHP\u INT\u MAX;
)。PHP内部将
date()
函数的第二个参数强制转换为整数,因此在32位机器上,字符串或浮点
-220898880
将变为整数
2085978496
,即日期2036-02-07

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

如果希望在x86和x64这两台机器上使用负时间戳,请使用扩展名:

$dt=新日期时间('@-2208988800');
echo$dt->format('Y-m-d');

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

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

@Zarazthuztra:在x64机器上,时间戳可以是负数。负数用于1970年1月1日之前的日期…@Glavić这是一个很好的观点,我没有想到这一点。谢谢格拉维奇,你必须在x64上计算一个纪元之前的日期?将它作为一个浮点数传递将使用我相信的微时间PHP@CharlieS:否。x86上的
date()
也可以将负时间戳作为第二个参数。您不能使用更大的整数作为
PHP\u INT\u MAX
,在本例中是。