PHP DateTime :: createFromFormat DATE_ATOM ISO 8601 - PullRequest
0 голосов
/ 21 февраля 2019

Я использую PHP 7.2 и пытаюсь создать дату из строки следующим образом:

$dateString = '2018-12-31T01:01:01+00:00';
$converted  = DateTime::createFromFormat(DATE_ATOM), $dateString);

Приведенный выше фрагмент кода работает нормально и возвращает ожидаемый результат.

Проблема возникает, когда я меняю день и месяц в строке даты, приведенной выше, следующим образом:

$dateString = '2018-31-12T01:01:01+00:00';
$converted  = DateTime::createFromFormat(DATE_ATOM), $dateString);

Я ожидал, что второй пример вернет false, но вместо этого яполучить фактическое время, 2020-07-12 01:01:01.000000.

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

Может ли это быть ошибкой в ​​PHP 7.2?

1 Ответ

0 голосов
/ 21 февраля 2019

Может ли это считаться ошибкой в ​​PHP 7.2?

Нет, этот метод реализован намеренно.Вы можете поспорить, если это правильный способ его реализации, но вот как он равен .Примечательно, что даже если мы все согласны с тем, что это не так, оно все равно будет продолжать работать, пока оно реализовано.

Практический ответ здесь - написать валидатор (для всего формата и всех частей) и выполнить любой ненадежный вводчерез это.

...