Дата с отрицательного поплавка
У меня есть временная метка в переменной
$data = (float) -2208988800;
Можно ли создать правильную дату на основе этих данных?
date("d.M.Y", $data)
возвращает "07.02.2036"
1 answers
Вы получаете результат 07.02.2036
, потому что вы находитесь на x86 (32-разрядной машине), где диапазон целых чисел составляет от -2147483648
до 2147483647
(см. echo PHP_INT_MAX;
). PHP внутренне преобразует 2-й параметр функции date()
в целое число, поэтому на 32-разрядной машине строка или значение с плавающей точкой -2208988800
станут целыми числами 2085978496
, что соответствует дате 2036-02-07, демо.
echo date('Y-m-d', -2208988800);
# 2036-02-07 (x86)
# 1900-01-01 (x64)
запустите код на 64-разрядной машине
Если вы хотите использовать отрицательные временные метки на обеих машинах, x86 и x64, используют DateTime
добавочный номер:
$dt = new DateTime('@-2208988800');
echo $dt->format('Y-m-d');
Обратите внимание, что для дат до эпохи unix метод getTimestamp()
вернет false
, где метод format('U')
вернет правильный номер метки времени.
var_dump( $dt->format('U') ); # -2208988800
var_dump( $dt->getTimestamp() ); # false