Проблема в том, что вы переходите на strtotime
, что он считает недопустимой датой. В документации написано:
Примечание:
Даты в форматах m / d / y или d-m-y неоднозначны, если посмотреть на
разделитель между различными компонентами: если разделитель является
косая черта (/), тогда предполагается американский м / д / у; тогда как если
разделитель - тире (-) или точка (.), затем европейский формат d-m-y
предполагается.
Чтобы избежать двусмысленности, лучше всего использовать ISO 8601 (ГГГГ-ММ-ДД)
даты или DateTime :: createFromFormat (), когда это возможно.
То, что здесь происходит, заключается в том, что вы передаете строку, используя разделитель /
, что означает, что strtotime
пытается проанализировать ее как m/d/y
вместо d/m/y
. Либо вообще не делайте замену, если ваша дата в европейском формате, или, что еще лучше, используйте DateTime::createFromFormat()
, как подсказывают документы.
Вы можете убедиться, что это действительно проблема, проверив возвращаемое значение strtotime
:
$destroy = mysql_real_escape_string($_POST['destroy']);
$desttempdate=str_replace("-", "/", $destroy);
var_dump(strtotime($desttempdate));
Это выведет "bool (false)", подтверждая, что strtotime
не может проанализировать его ввод.
Решение:
Как уже упоминалось выше, предпочитайте DateTime::createFromFormat()
:
$date = DateTime::createFromFormat('d/m/Y', $_POST['destroy']);
$destdate = $date->format('Y-m-d');
В противном случае, даже если я не рекомендую такой подход, самый простой способ решения проблемы - просто пропустить str_replace
:
$destdate = date('Y-m-d', strtotime($_POST['destroy']));