Будет ли сборка x64 PHP / MYSQL поддерживать полные 64-битные временные метки на 64-битном Windows Server - PullRequest
4 голосов
/ 05 ноября 2010

Возможно, глупый вопрос, но мне нужно найти ответ. Приложение, которое мы пишем, должно обрабатывать отдаленные прошлые и будущие даты, и я думаю, что обработка наших дат как 64-битных меток времени Unix будет простым решением, если я правильно понимаю руководство по PHP , в котором говорится, что максимальное значение типа int зависит от платформы и всегда подписан. Таким образом, платформа x64 должна поддерживать 2 ^ 63 байта, в то время как платформа x86 должна поддерживать 2 ^ 31 максимума.

По сути, приложение имеет дело только с целочисленными временными метками, чтобы сделать наши довольно сложные алгоритмы немного проще. Однако попытка обработать отдаленные прошлые или будущие значения временной метки вызывает ожидаемое переполнение для любого значения, превышающего +/- 2 ^ 31 в PHP для нашей текущей сборки x86. Мое решение состоит в том, чтобы просто скомпилировать сборку x64 PHP с бесплатной загрузкой Visual C ++ Studio, но прежде чем я углублюсь в это, я хотел бы знать, правильно ли мое предположение - "Сборка PHP для Windows x64 будет корректно обрабатывать 64-битные int значения и правильно преобразовать «галочки» Windows в 64-битную метку времени Unix для ее собственных функций даты и времени, как это делается для сборки x86. "

Например:

echo mktime(0, 0, 0, 12, 31, 2055);

вернет правильную метку времени вместо false .

То же самое относится и к временным меткам MYSQL. Например:

SELECT UNIX_TIMESTAMP('2065-11-30 10:30:19');

вернет правильное значение вместо '0' , как это делается для текущей сборки x86, которую мы выполняем.

-Надеюсь, я не слишком двусмысленен. Заранее спасибо. Мы всего лишь кучка фанатов науки, а не настоящие программисты, и мы боремся с этой «тривиальной» проблемой.

1 Ответ

1 голос
/ 05 ноября 2010

Интересный вопрос: я пытался запустить некоторые тесты некоторое время назад, ожидая, что полная 64-битная временная метка даст мне диапазон дат между большим взрывом и выгоранием солнца, но обнаружил, что это были только младшие 32-битные обрабатывается при передаче в функцию date (), хотя при отображении целочисленного значения метки времени отображался полный 64-битный диапазон.

EDIT

Однако установка объекта dateTime с использованием 64-битного диапазона значений работала без проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...