Date(), "Неверное сформированное числовое значение столкнулось" не хочет форматировать дату, прошедшую в $_POST

К сожалению, я не могу использовать DateTime(), поскольку на сервере, на котором этот проект включен, работает PHP v.5.2.

рассматриваемая строка:

$aptnDate2 = date('Y-m-d', $_POST['nextAppointmentDate']); 

выдает следующую ошибку:

Notice: A non well formed numeric value encountered

поэтому я var dump, чтобы убедиться, что он хорошо отформатирован.

var_dump($_POST['nextAppointmentDate']);  

string(10) "12-16-2013"

php docs state, что для метки времени требуется не строка. но когда я это делаю:

date('Y-m-d', strtotime($_POST['nextAppointmentDate']));

а затем var_dump результат, я получаю следующее:

string(10) "1969-12-31"

Почему я не могу форматировать дату с этим значением даты и strtotime()?

спасибо!

Ответы

Ответ 1

Из документации для strtotime():

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

В строке даты у вас есть 12-16-2013. 16 не является допустимым месяцем, и, следовательно, strtotime() возвращает false.

Поскольку вы не можете использовать класс DateTime, вы можете вручную заменить - на /, используя str_replace(), чтобы преобразовать date в формате, который strtotime() понимает:

$date = '2-16-2013';
echo date('Y-m-d', strtotime(str_replace('-','/', $date))); // => 2013-02-16

Ответ 2

Второй аргумент в функции date() - это временная метка unix, а не строка даты. Просто используйте explode(), чтобы разделить строку даты и объединить ее снова. strtotime не ожидает даты в таком формате.