Вопрос прост, это ошибка или я что-то здесь упускаю, дело в том, что большее значение для getdate возвращает более раннюю дату. Что там не так??
Почему getdate(1500000000) возвращает 7 июля 2017 г., а getdate(2500000000) возвращает 13 февраля 1913 г.
comment
Знаете ли вы что-нибудь о двоичных числах, 32-битных целых числах и т. д.?
- person John3136   schedule 21.04.2017
comment
где твой код?
- person Pedro Lobito   schedule 21.04.2017
comment
Вообще ничего, я спрашиваю, потому что понятия не имею, почему это происходит, и я боюсь, что мой проект может пойти к черту, потому что я часто использую метки времени unix.
- person Marange   schedule 21.04.2017
comment
В документах PHPP есть примечание, объясняющее диапазон дат временных меток unix
- person Mark Baker   schedule 21.04.2017
Ответы (2)
2,500,000,000
превышает максимальное значение для 32-битного целого числа.
Я не знал ответа заранее. Вот ресурсы, которые я использовал, чтобы понять это: http://php.net/manual/en/language.types.integer.php
INT максимальный размер для 32-битной системы
person
heylookltsme
schedule
20.04.2017
Ага! Я узнал об этом, прочитав ответ John3136, а затем отредактировал свой, чтобы устранить неточность. Зато ты быстрый ;)
- person heylookltsme; 21.04.2017
Итак, как мне быть с этим, мой проект в конечном итоге рухнет??
- person Marange; 21.04.2017
@Marange - либо переключитесь на 64-битный PHP, либо используйте объекты DateTime вместо временных меток unix.
- person Mark Baker; 21.04.2017
2500000000 = 0x9502F900 = 1001 0101 0000 0010 1111 1001 0000 0000
т. е. в 32-битной системе установлен бит знака, поэтому вы фактически получили отрицательное число. Поскольку вселенная началась в 1970 году (согласно unix), дата в 1913 году является явным признаком отрицательной метки времени.
person
John3136
schedule
20.04.2017