PHP$date2=$date1中出现错误->;格式(';Y-m-d';)

PHP$date2=$date1中出现错误->;格式(';Y-m-d';),php,mysql,datetime,Php,Mysql,Datetime,我得到以下错误: PHP致命错误:对非对象调用成员函数format() 代码: $date = new DateTime(); $date1 = $date->modify('-6 months'); $date2 = $date1->format('Y-m-d'); 我希望从现在起获得6个月前的日期,并删除数据库中早于6个月日期的所有条目: $query = $conn->prepare("DELETE FROM files WHERE files.date < ?"

我得到以下错误:

PHP致命错误:对非对象调用成员函数format()

代码:

$date = new DateTime();
$date1 = $date->modify('-6 months');
$date2 = $date1->format('Y-m-d');
我希望从现在起获得6个月前的日期,并删除数据库中早于6个月日期的所有条目:

$query = $conn->prepare("DELETE FROM files WHERE files.date < ?");
$query->bind_param('s', $date2);
$query->execute();
$query=$conn->prepare(“从files.date<?”所在的文件中删除”);
$query->bind_参数('s',$date2);
$query->execute();

在MySQL中,“日期”字段位于数据类型“timestamp”的文件表中,其值是MySQL在创建行时默认存储的“CURRENT_timestamp”。

这段代码从现在起6个月前就可以看到:

date('Y-m-d', strtotime('now -6 month')) 日期('Y-m-d',标准时间('now-6个月')) 编辑:

和使用日期时间:

echo (new DateTime('-6 months'))->format('Y-m-d'); echo(新日期时间('-6个月'))->格式('Y-m-d') 请尝试以下代码:

<?php
$date = new DateTime('-6 months');
echo $date2 = $date->format('Y-m-d');
?>

似乎是对

$date->modify('-6 months');
遇到错误并且不返回
DateTime
实例,但可能返回
false
(请参阅)

您使用的是哪个PHP版本?在PHP5.5.9上,我无法用给定的示例重现该错误

也许你可以用这个

编辑:

我接受了测试,发现旧版本的PHP(即5.1.0)返回NULL,而不是DateTime对象:。在这种情况下,似乎您直接在日期上应用了修改,因此您需要将代码更改为

$date = new DateTime();
$date->modify('-6 months');
$dateString = $date->format('Y-m-d');

$query = $conn->prepare("DELETE FROM files WHERE files.date < ?");
$query->bind_param('s', $dateString);
$query->execute();
$date=new DateTime();
$date->modify('-6个月');
$dateString=$date->format('Y-m-d');
$query=$conn->prepare(“从files.date<?”的文件中删除”);
$query->bind_参数('s',$dateString);
$query->execute();

看来您使用的是过时的php版本

从PHP5.3开始,
DateTime::modify
返回在返回
null
之前调用的DateTime对象

您不需要将修改的结果分配给新变量,因为它修改当前对象,并且不返回新对象

要使其在5.2中起作用,请执行以下操作:

<?php
$date = new DateTime();
$date->modify('-6 months');
$dateS = $date->format('Y-m-d');

var_dump($dateS);

检查
$date1
@OliCharlesworth的类型。您能解释更多吗?我是PHP新手。$date1应该是一个DateTime对象,因为modify()方法会返回您正在运行哪个PHP版本?因为文档会说:
5.3.0将成功时的返回值从NULL更改为DateTime。
如果OP使用的是DateTime对象,建议他们回归使用基本日期函数并不是解决问题的最佳方法
$dateS = (new DateTime('-6 months'))->format('Y-m-d');