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 не ожидает даты в таком формате.