Мне понравился ответ epicdev, однако класс, похоже, только подтверждает формат, дата, как 2015-18-39, по-прежнему действительна для него и преобразуется в 2016-07-09 вместо того, чтобы отклонять недействительный день/месяц
Небольшое изменение в нем состоит в том, чтобы дважды проверить, что обработанная дата по-прежнему совпадает с введенной датой.
предложенная glavic в gmail dot com на документации php.net