Breeze - спасибо, тоже вариант, если не смотреть в сторону стандарта даты для strtotime(). Да и есть ограничение по дате:
Для большинства систем допустимыми являются даты с 13 декабря 1901, 20:45:54 GMT по 19 января 2038, 03:14:07 GMT. (Эти даты соответствуют минимальному и максимальному значению 32-битового целого со знаком). Для Windows допустимы даты с 01-01-1970 по 19-01-2038. Не все платформы поддерживают отрицательные метки времени, поэтому даты ранее 1 января 1970 г. не поддерживаются в Windows, некоторых версиях Linux и некоторых других операционных системах.
sprintf() будет обрабатывать больший диапазон дат:
date("Y-m-d", strtotime("11-2-20")) - в результате 2011-02-20, не верно
sprintf("%04d-%02d-%02d", 11, 2, 20) -в результате 0011-02-20 верно
Также, проблема с некорректной датой, например 31 февраля:
date("Y-m-d", strtotime("1111-2-31")) в результате
ПРЕОБРАЗОВАНИЕ ДАТЫ в 1111-03-03 -
sprintf("%04d-%02d-%02d", 1111, 2, 31) в результате 1111-02-31 +
То есть, проверив дату на корректность после strtotime - получим true, хотя в дату внесены изменения.