Я знаю, что этот вопрос очень популярен

Спросил здесь PHP: strtotime возвращает false для будущей даты? и здесь Как я могу работать с датами до 1900 года в PHP ?

Не могли бы вы подтвердить мой выбор:

  1. Переход на 64-битную архитектуру

  2. Замените вызовы strtotime на DateTime + DateInterval Мы не можем вызвать DateTime-> getTimestamp, но мы можем использовать DateInterval для вычисления разницы

Есть ли у меня другие варианты? К сожалению, я не могу выбрать вариант 2, потому что я полагаюсь на ORM (Propel) + много унаследованного кода, использующего strtotime. Рефакторинг этого материала + настройка генераторов ORM может быть дороже, чем обновление до 64-битной версии.

Если бы кто-нибудь мог подтвердить или предложить какие-либо другие варианты, это было бы очень признательно.

Благодарность

Формат даты - стандартный гггг-мм-дд.

Версия PHP 5.3.2

4
hbt 26 Авг 2011 в 03:50

2 ответа

Лучший ответ

AFAIK, вы ограничены этими двумя решениями.

Вам следует перейти на 64-битную систему, если вы можете себе это позволить, и если это решит проблему, то это лучше.

Изменить: Просто нужно было проверить: http://php.net/manual/en/function.runkit-function -redefine.php Возможно, вы могли бы попробовать переопределить strtotime() для работы с датами до 1901 года.

3
Ibrahim AshShohail 26 Авг 2011 в 13:46

Вы можете использовать gregoriantojd, диапазон дат которого составляет 4714 г. до н.э. до 9999 г.н.э.Гораздо более широкий диапазон, чем с 1900 (1970) -2038 гг. Если вы пытаетесь вычислить разницу дат, она достаточно близка. Ну, кроме «потерянных» 10 дней 4-14 октября 1582 года. И из-за другого расчета високосного года вы будете отключаться на день каждые 100 лет.

0
Brent Baisley 26 Авг 2011 в 02:30