问题是您传递给strtotime
它认为无效的日期。文档说:
笔记:
m/d/y 或 dmy 格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜杠 (/),则假定为美式 m/d/y;而如果分隔符是破折号 (-) 或点 (.),则假定为欧洲 dmy 格式。
为避免潜在的歧义,最好尽可能使用 ISO 8601 (YYYY-MM-DD) 日期或 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']));