Дата с отрицательного поплавка


У меня есть временная метка в переменной

$data = (float) -2208988800;

Можно ли создать правильную дату на основе этих данных? date("d.M.Y", $data) возвращает "07.02.2036"

Author: Anthony, 2013-12-25

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)

запуск кода на машине x86

запустите код на 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

демо-версия

 2
Author: Glavić, 2013-12-25 19:09:30