PHP strtotime возвращает false для дат менее 1900 - PullRequest
4 голосов
/ 26 августа 2011

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

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

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

  1. Обновление до 64-битной архитектуры

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

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

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

Спасибо

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

PHP версия 5.3.2

Ответы [ 2 ]

3 голосов
/ 26 августа 2011

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

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

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

0 голосов
/ 26 августа 2011

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

...