PHP 中的错误 $date 2 = $date 1->格式('Y-m-d')



我得到以下错误:

在非对象上调用成员函数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();

在MySQL中"date"字段是在数据类型为"timestamp"的文件表中,该表的值为"CURRENT_TIMESTAMP", MySQL在创建行时将其作为默认值存储。

这段代码显示的是6个月前的时间:

<>之前的日期(Y-m-d, strtotime("现在6个月"))之前编辑:

和使用DateTime:

<>以前回波(新DateTime(6个月))——>格式("Y-m-d");

尝试下面的代码:

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

您使用的是过时的php版本

从php 5.3+开始,DateTime::modify返回在null返回之前被调用的datetime对象。

你不需要将modify的结果赋值给一个新变量,因为它修改了当前对象,而不返回一个新对象。

要使它在5.2上工作:

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

你应该更新你的php到一个支持的版本。

PHP 5.4+

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

看起来像是对

的调用
$date->modify('-6 months');

遇到错误,不返回DateTime实例,但可能返回false(参见文档)。

您使用的是哪个PHP版本?我无法在PHP 5.5.9

上复制该错误。

也许你可以直接使用strtotime函数

编辑:

我从Internet Archive中找到了Wayback Machine,发现旧版本的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();

最新更新