strtotime () & date () странное поведение при преобразовании даты в тот же формат, что и раньше - PullRequest
3 голосов
/ 24 февраля 2011

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

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

вывод

  01-01-1970

?>

http://codepad.org/AFZ6jel7

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

Спасибо.

Ответы [ 2 ]

7 голосов
/ 24 февраля 2011

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

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

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

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

Опции, которые я могу придумать, не задумываясьPHP-разработчик:

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

Замена - с / для MDY поможет.

echo date('m-d-Y',strtotime(str_replace('-', '/', $date)));
...