strtotime () & date () странное поведение при преобразовании даты в тот же формат, что и раньше

Мне нужно преобразовать формат даты в mm-dd-yyyy Я не знаю, какой формат текущей даты является динамическим, поэтому, если у меня есть динамический формат даты уже в mm-dd-yyyy тогда функция date() возвращается ниже Outout

  $date='02-13-2011'; echo date('md-Y',strtotime($date)); 

выход

  01-01-1970 ?> 

http://codepad.org/AFZ6jel7

Поэтому я должен проверить, уже ли дата в mm-dd-yyyy а не применять форматирование даты. Есть ли другой способ сделать это? может быть передан еще один параметр в этих функциях или что-то подобное.

Благодарю.

Я сильно подозреваю, что именно это вызывает проблему:

Даты в форматах m / d / y или dmy устраняются неоднозначно, глядя на разделитель между различными компонентами: если разделитель является косой чертой (/), то предполагается, что американский m / d / y; тогда как если разделитель является тире (-) или точкой (.), тогда предполагается европейский формат dmy.

(Найдено в документации strtotime .)

У вас есть разделители тире, поэтому он принимает формат dmy, анализирует его как месяц 13 и, таким образом, эффективно терпит неудачу.

Параметры, которые я могу придумать, не будучи разработчиком PHP:

  • Если есть функция, которая позволяет вам явно указать, в каком формате находится строка, используйте эту
  • Измените формат, чтобы использовать слэши
  • Измените свой формат, чтобы использовать dmy вместо mdy

Замена – с помощью / для mdY поможет.

 echo date('md-Y',strtotime(str_replace('-', '/', $date)));