PHP 32-битный разбор дат для дат до 13 декабря 1901 года - PullRequest
3 голосов
/ 11 апреля 2011

Я с радостью использовал strtotime () на моей машине для разработки, чтобы проанализировать даты, некоторые из которых относятся к 1800-м годам, с чрезвычайным примером в 1500-х.

Но мой компьютер для разработки 64-битный, а сервер 32-битный.На 32-битной машине любая дата до пятницы, 13 декабря 1901 г. 20:45:54 UTC выходит за пределы допустимого диапазона (см. Примечания к strtotime).

Я рад написать для этого некоторый пользовательский код, но подумалспросил бы, справится ли какая-либо из встроенных функций php.Даты в формате ISO 8601.

Для чего стоит сервер это centos 5.4 с php 5.2.10

1 Ответ

3 голосов
/ 11 апреля 2011

1901-12-12T05: 00: 00Z, например

Я не могу проверить это сейчас, но конструктор DateTime может сможет принять ваш формат без необходимости createFromFormat.Я не могу сказать по документации.

Попробуйте

try {
    $date = new DateTime('1901-12-12T05:00:00Z');
} catch (Exception $e) {
    echo "Arggh! ".$e->getMessage();
    die();
}

echo $date->format('Y-m-d H:i:s');

и посмотрите, что произойдет, обращая особое внимание на то, правильно ли он понимает Z (т.е. делает его временем UTC).

DateTime использует 64-битные числа для внутреннего использования в любой системе и не имеет ограничений по диапазону.

Как уже говорилось, начиная с 5.3 вы сможете использовать createFromFormat, который может анализировать любую дату, указанную одним из заполнителей date().Это оптимальный способ, потому что вы заставляете его анализировать определенный шаблон, а не угадывать его.

...