Как заставить strtotime () анализировать входную строку только как дату?
Вы не делаете. strtotime
использует очень четко определенные форматы синтаксического анализа . То, что оно генерирует, будет полностью зависеть от того, что вы ему дадите.
'10.01.11'
анализируется как формат времени , поскольку всегда интерпретирует три пары цифр, разделенных точками, как время. Он будет распознавать даты , если они разделены тире, косой чертой или пробелом . Досадно, что на странице формата даты есть пример, в котором используются точки, но, похоже, нет верного пути к принудительному разбору даты вместо разбора времени. Вздох, PHP.
Если вам нужно, чтобы этот конкретный формат интерпретировался как дата, а не как время, у вас есть два варианта.
Во-первых, вы можете использовать другой метод анализа даты. Если ожидаемый формат никогда не менялся, вы можете использовать DateTime::createFromFormat()
или ужасающий strptime
. В комментариях вы указали, что формат будет различным, и ваша версия PHP достаточно старая, чтобы не иметь DateTime, поэтому это может не сработать.
Во-вторых, вы можете предварительно обработать данные. По крайней мере, в этом примере преобразование .
в /
может помочь, хотя 10/01/11
может быть неоднозначным как дата для людей. Нет ничего плохого в том, чтобы немного понюхать регулярное выражение, чтобы определить, как лучше всего обрабатывать данные.
Существует также третий вариант: если вы получаете эту информацию от пользователей, заставьте ваше приложение начать заставлять пользователей вводить даты в обычном, согласованном, разбираемом формате. Обучение ваших пользователей использованию YYYY-MM-DD может занять некоторое время, но, вероятно, это самая разумная долгосрочная ставка.