问题是你传递给strtotime 它认为是一个无效的日期。 The documentation 说:
注意:
m/d/y 或 d-m-y 格式的日期可以通过查看来消除歧义
各个组件之间的分隔符:如果分隔符是
斜线 (/),则假定为美式 m/d/y;而如果
分隔符是破折号 (-) 或点 (.),然后是欧洲 d-m-y 格式
假设。
为避免潜在的歧义,最好使用 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']));