Функция strtotime и 2037 год в PHP x64

Обсуждение проблем в работе программного комплекса
Соглядатай
Сообщения: 45
Зарегистрирован:
16 окт 2014, 02:13

Функция strtotime и 2037 год в PHP x64

Соглядатай » 15 июн 2016, 02:30

Доброго времени суток!

Столкнулся недавно с такой проблемой. Дома на Mac выборка по датам в CMS работает отлично, а на рабочей Windows-машине с OpenServer 5.2.4 (Apache 2.4 x64, PHP 5.6 x64, MySQL 5.7 x64) уже нет.

Стал разбираться в коде CMS и нашел такую строку:
$end = $endDate ? Utils::date2timestamp($endDate) : strtotime("now +1000 years");
Т. е. если конечная дата не указана, берется дата-время сейчас и прибавляется 1000 лет.

Опытным путем было установлено критическое значение лет, после которого код не работает:
$date = date('d-m-Y', strtotime('now +21 years'));
echo $date . "<br>"; //15-06-2037
$date = date('d-m-Y', strtotime('now +22 years'));
echo $date; //01-01-1970
Собственно, такое поведение присуще 32-х битной версии PHP, чему я нашел подтверждение на StackOverflow:
https://stackoverflow.com/questions/798 ... the-future

Далее посмотрел спецификацию на php.net, секция "Примечания":
https://secure.php.net/manual/ru/functi ... time-notes

Поведение функции говорит о том, что у меня 32-битная версия PHP, однако phpinfo() показывает архитектуру x64.
Screenshot_6.png
В чем может быть причина проблемы?
Аватара пользователя
Максим
Сообщения: 5408
Зарегистрирован:
11 дек 2010, 20:29
Контактная информация:

Re: Функция strtotime и 2037 год в PHP x64

Максим » 15 июн 2016, 12:56

Google говорит что поддержка x64 в PHP версий 5.x неполная, в частности для функций времени всё равно используется 32. И ещё google говорит что полная x64 реализация есть в PHP7. Попробуйте использовать более новую версию PHP.
Аватара пользователя
Максим
Сообщения: 5408
Зарегистрирован:
11 дек 2010, 20:29
Контактная информация:

Re: Функция strtotime и 2037 год в PHP x64

Максим » 15 июн 2016, 13:02

Да, так оно и есть, проверил. На php 5.6 x64 не работает, на PHP 7 x64 работает.
Соглядатай
Сообщения: 45
Зарегистрирован:
16 окт 2014, 02:13

Re: Функция strtotime и 2037 год в PHP x64

Соглядатай » 16 июн 2016, 16:23

Максим писал(а):Google говорит что поддержка x64 в PHP версий 5.x неполная, в частности для функций времени всё равно используется 32. И ещё google говорит что полная x64 реализация есть в PHP7. Попробуйте использовать более новую версию PHP.
А можно ссылку на то, что нагуглили?

Вот скрин с Mac-версии PHP 5.5.34:
Screenshot at июня 17 00-19-55.png
Архитектура явно не указана, как в Windows-версии, как-то все вместе: X86_64.
Версия ниже, но подобной проблемы не обнаружилось. :roll:
Ответить